openapi: 3.0.3
info:
  x-api-type: Admin
  x-api-family: Shopper
  title: Slas Admin
  version: 1.12.31
  description: |-
    [Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/slas-admin/slas-admin-oas-v1-public.yaml)

    # API Overview

    The SLAS Admin API is a companion to the main [Shopper Login and API Access Service](https://developer.salesforce.com/docs/commerce/commerce-api/references?meta=shopper-login:Summary) (SLAS), which enables secure access to Commerce Cloud’s Shopper APIs. The SLAS Admin API is only used for administration tasks, not for requesting access to the Shopper APIs.

    **Important:** Before using this API, follow the instructions in [Authorization for Shopper APIs](https://developer.salesforce.com/docs/commerce/commerce-api/guide/authorization-for-shopper-apis.html) from the Get Started guides. The guide provides a complete set of instructions for setting up a SLAS client.

    For more information, see the [SLAS guides](https://developer.salesforce.com/docs/commerce/commerce-api/guide/slas.html).
servers:
  - url: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth-admin/v1
    variables:
      shortCode:
        default: shortCode
paths:
  /tenants/{tenantId}:
    get:
      summary: Retrieve a tenant by tenant ID.
      description: Retrieve a tenant by tenant ID.
      operationId: retrieveTenant
      parameters:
        - $ref: '#/components/parameters/tenantId'
      responses:
        '200':
          description: The tenant was retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tenant'
              examples:
                Tenant:
                  $ref: '#/components/examples/Tenant'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantRequestException400:
                  $ref: '#/components/examples/TenantRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantException401:
                  $ref: '#/components/examples/TenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantNotFoundException404:
                  $ref: '#/components/examples/TenantNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    put:
      summary: Create or update a tenant. Use the request body to provide identification and contact information for the tenant and its associated merchant.
      description: This API is used to create or update a tenant. The tenant ID is the unique identifier for the tenant and is used in all subsequent API calls. The tenant ID must be unique across all tenants in the system.
      operationId: registerTenant
      parameters:
        - $ref: '#/components/parameters/tenantId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantDto'
            examples:
              TenantDto:
                $ref: '#/components/examples/TenantDto'
        required: true
      responses:
        '200':
          description: The tenant was updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tenant'
              examples:
                Tenant:
                  $ref: '#/components/examples/Tenant'
        '201':
          description: The tenant was created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tenant'
              examples:
                Tenant:
                  $ref: '#/components/examples/Tenant'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantUpdateException400:
                  $ref: '#/components/examples/TenantUpdateException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantUpdateException401:
                  $ref: '#/components/examples/TenantUpdateException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantNotFoundException404:
                  $ref: '#/components/examples/TenantNotFoundException404'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                TenantAlreadyExistsException409:
                  $ref: '#/components/examples/TenantAlreadyExistsException409'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
  /tenants/{tenantId}/clients:
    get:
      summary: Retrieve/Get all tenant clients.
      description: Retrieve a list of SLAS clients associated with the tenant_id.
      operationId: retrieveClients
      parameters:
        - $ref: '#/components/parameters/tenantId'
      responses:
        '200':
          description: All tenant clients retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientListResponse'
              examples:
                ClientListResponse:
                  $ref: '#/components/examples/ClientListResponse'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientNotFoundException404:
                  $ref: '#/components/examples/ClientNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
  /tenants/{tenantId}/clients/{clientId}:
    get:
      summary: Retrieve a client.
      description: Retrieve a client by client ID. The client ID is the unique identifier for the client and is used in all subsequent API calls. The client ID must be unique across all tenants in the system.
      operationId: retrieveClient
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
      responses:
        '200':
          description: The client was retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
              examples:
                Client:
                  $ref: '#/components/examples/Client'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientRequestException400:
                  $ref: '#/components/examples/ClientRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientNotFoundException404:
                  $ref: '#/components/examples/ClientNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
    put:
      summary: Create or update a client.
      description: It is strongly advised to refrain from using the “sfcc-shopper-context.rw” scope with a PUBLIC Client because it offers fewer protections and could potentially enable malicious actors to access Shopper Context enabled promotions. It is highly recommended to use “sfcc-shopper-context.rw” scope with a private client.
      operationId: registerClient
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientRequest'
            examples:
              ClientRequest:
                $ref: '#/components/examples/ClientRequest'
        required: true
      responses:
        '200':
          description: The client was updated successfully. A secret is only returned when a secret was sent with the update request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
              examples:
                ClientRequest:
                  $ref: '#/components/examples/ClientWithSecret'
        '201':
          description: The client was created successfully. This is the only time the secret is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
              examples:
                ClientRequest:
                  $ref: '#/components/examples/ClientWithSecret'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientRequestException400:
                  $ref: '#/components/examples/ClientRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientNotFoundException404:
                  $ref: '#/components/examples/ClientNotFoundException404'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientConflictException409:
                  $ref: '#/components/examples/ClientConflictException409'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    delete:
      summary: Delete a client.
      description: Delete a client by client ID.
      operationId: deleteClient
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
      responses:
        '204':
          description: No content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientRequestException400:
                  $ref: '#/components/examples/ClientRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientNotFoundException404:
                  $ref: '#/components/examples/ClientNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
  /tenants/{tenantId}/clients/{clientId}/password-action-templates:
    get:
      summary: Retrieve/get a password action template.
      description: Retrieve a password action template by client ID.
      operationId: retrievePwdlessTemplate
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
        - $ref: '#/components/parameters/channelId'
        - $ref: '#/components/parameters/actionType'
        - $ref: '#/components/parameters/templateType'
      responses:
        '200':
          description: The password action template was retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordActionTemplate'
              examples:
                PasswordActionTemplate:
                  $ref: '#/components/examples/PasswordActionTemplate'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                BadRequestException400:
                  $ref: '#/components/examples/BadRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                PasswordActionTemplateNotFoundException404:
                  $ref: '#/components/examples/PasswordActionTemplateNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    put:
      summary: Create or update a password action template.
      description: Create or update a password action template by client ID.
      operationId: registerPwdlessTemplate
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordActionTemplate'
            examples:
              PasswordActionTemplateRequest:
                $ref: '#/components/examples/PasswordActionTemplateRequest'
        required: true
      responses:
        '200':
          description: The password action template was updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordActionTemplate'
              examples:
                PasswordActionTemplate:
                  $ref: '#/components/examples/PasswordActionTemplate'
        '201':
          description: A password action template was created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PasswordActionTemplate'
              examples:
                PasswordActionTemplate:
                  $ref: '#/components/examples/PasswordActionTemplate'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                PasswordActionTemplateCreateException400:
                  $ref: '#/components/examples/PasswordActionTemplateCreateException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                PasswordActionTemplateNotFoundException404:
                  $ref: '#/components/examples/PasswordActionTemplateNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    delete:
      summary: Delete a password action template.
      operationId: deletePwdlessTemplate
      description: Delete a password action template.
      parameters:
        - $ref: '#/components/parameters/clientId'
        - $ref: '#/components/parameters/tenantId'
        - $ref: '#/components/parameters/channelId'
        - $ref: '#/components/parameters/actionType'
        - $ref: '#/components/parameters/templateType'
        - $ref: '#/components/parameters/locale'
      responses:
        '204':
          description: No content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                PasswordActionTemplateDeleteException400:
                  $ref: '#/components/examples/PasswordActionTemplateDeleteException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ClientTenantException401:
                  $ref: '#/components/examples/ClientTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                PasswordActionTemplateNotFoundException404:
                  $ref: '#/components/examples/PasswordActionTemplateNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
  /tenants/{tenantId}/idps:
    get:
      summary: Retrieve/Get all tenant identity providers.
      operationId: retrieveIdentityProviders
      description: Retrieve a list of SLAS identity providers associated with the tenant_id.
      parameters:
        - $ref: '#/components/parameters/tenantId'
      responses:
        '200':
          description: All tenant identity providers retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdpListResponse'
              examples:
                IdpListResponse:
                  $ref: '#/components/examples/IdpListResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpRequestException400:
                  $ref: '#/components/examples/IdpRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpTenantException401:
                  $ref: '#/components/examples/IdpTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpNotFoundException404:
                  $ref: '#/components/examples/IdpNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
  /tenants/{tenantId}/idps/{name}:
    get:
      summary: Retrieve/Get a specific identity provider.
      operationId: retrieveIdentityProvider
      description: Retrieve a specific identity provider by name.
      parameters:
        - $ref: '#/components/parameters/name'
        - $ref: '#/components/parameters/tenantId'
      responses:
        '200':
          description: The identity provider was retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityProvider'
              examples:
                IdentityProvider:
                  $ref: '#/components/examples/IdentityProvider'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpRequestException400:
                  $ref: '#/components/examples/IdpRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpTenantException401:
                  $ref: '#/components/examples/IdpTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpNotFoundException404:
                  $ref: '#/components/examples/IdpNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    put:
      summary: Create or update an identity provider.
      operationId: registerIdentityProvider
      description: Create or update an identity provider by name.
      parameters:
        - $ref: '#/components/parameters/name'
        - $ref: '#/components/parameters/tenantId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentityProvider'
            examples:
              IdentityProvider:
                $ref: '#/components/examples/IdentityProvider'
        required: true
      responses:
        '200':
          description: The identity provider was updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityProviderResponse'
              examples:
                IdpProviderResponse:
                  $ref: '#/components/examples/IdpProviderResponse'
        '201':
          description: The identity provider was created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityProviderResponse'
              examples:
                IdpProviderResponse:
                  $ref: '#/components/examples/IdpProviderResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpRequestException400:
                  $ref: '#/components/examples/IdpRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpTenantException401:
                  $ref: '#/components/examples/IdpTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpNotFoundException404:
                  $ref: '#/components/examples/IdpNotFoundException404'
        '409':
          description: Conflict. Duplicate
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpConflictException409:
                  $ref: '#/components/examples/IdpConflictException409'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
    delete:
      summary: Delete an identity provider.
      operationId: deleteIdentityProvider
      description: Delete an identity provider by name.
      parameters:
        - $ref: '#/components/parameters/name'
        - $ref: '#/components/parameters/tenantId'
      responses:
        '204':
          description: No content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpRequestException400:
                  $ref: '#/components/examples/IdpRequestException400'
        '401':
          description: Unauthorized. Wrong tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpTenantException401:
                  $ref: '#/components/examples/IdpTenantException401'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                IdpNotFoundException404:
                  $ref: '#/components/examples/IdpNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
  /tenants/{tenantId}/customers/{customerId}:
    delete:
      summary: Delete all shopper records associated with a shopper's customer ID. The email ID is used if it's passed as a query parameter. This conforms to the GDPR regulations.
      operationId: deleteShopper
      description: Delete all shopper records associated with a shopper's customer ID. The email ID is used if it's passed as a query parameter. This conforms to the GDPR regulations.
      parameters:
        - $ref: '#/components/parameters/customerId'
        - $ref: '#/components/parameters/tenantId'
        - $ref: '#/components/parameters/emailAddress'
      responses:
        '204':
          description: No content
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ShopperDeleteException:
                  $ref: '#/components/examples/ShopperDeleteException400'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ShopperNotFoundException:
                  $ref: '#/components/examples/ShopperNotFoundException404'
      security:
        - BearerToken:
            - SLAS_SERVICE_ADMIN
            - SLAS_ORGANIZATION_ADMIN
components:
  securitySchemes:
    BearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: A security scheme that supplements SLAS Administration APIs that are secured with an B2c Commerce Account Manager JWT. This security scheme expects a valid B2C Commerce Account Manager Bearer token passed in the Authorization header to permit API access.
  parameters:
    tenantId:
      name: tenantId
      in: path
      required: true
      schema:
        maxLength: 32
        type: string
        example: zzeu_001, bgvn_dev
    clientId:
      name: clientId
      in: path
      required: true
      schema:
        maxLength: 36
        type: string
        example: 876aff68-6ee5-474f-932d-c90c1d79bcf7
    channelId:
      name: channelId
      in: query
      required: true
      schema:
        maxLength: 100
        type: string
        example: SiteGenesis
    actionType:
      name: actionType
      in: query
      required: true
      schema:
        maxLength: 36
        type: string
        description: "Describes the type of action that the password action template will be used for. \nHere are the actions that each enumerated string refers to:\n    - `PWDLESS_LOGIN`: Passwordless login\n    - `PWD_RESET_ACTION`: Password reset\n    - `PWD_FORGOT_ACTION`: Forgot password\""
        enum:
          - PWDLESS_LOGIN
          - PWD_RESET_ACTION
          - PWD_FORGOT_ACTION
        example: PWDLESS_LOGIN
    templateType:
      name: templateType
      in: query
      required: true
      schema:
        maxLength: 8
        type: string
        enum:
          - EMAIL
          - SMS
        example: EMAIL
    locale:
      name: locale
      in: query
      required: true
      schema:
        type: string
        pattern: ^[a-z][a-z]-[A-Z][A-Z]$
        example: en-US
    name:
      name: name
      in: path
      required: true
      schema:
        maxLength: 256
        type: string
        example: Name
    customerId:
      name: customerId
      in: path
      required: true
      schema:
        maxLength: 28
        type: string
        example: bcJN7998472pLiZuyGabs8knlj
    emailAddress:
      name: emailAddress
      in: query
      description: The shoppers email address.
      required: false
      schema:
        maxLength: 256
        type: string
        example: joe.shopper@foo.org
  schemas:
    Tenant:
      required:
        - contact
        - description
        - emailAddress
        - isDeleted
        - merchantId
        - phoneNo
        - requestQuotaPerMinute
        - status
        - tenantId
        - tier
      type: object
      properties:
        tenantId:
          maxLength: 8
          type: string
          example: aaaa_prd
        merchantId:
          minimum: 0
          type: integer
          example: 1
        description:
          maxLength: 256
          type: string
          example: SLAS Merchant Name
        contact:
          maxLength: 256
          type: string
          example: SLAS Tenant Contact
        emailAddress:
          maxLength: 200
          type: string
          example: tenant_contact@slas.tst
        phoneNo:
          maxLength: 50
          type: string
          example: 000-000-0000
        isDeleted:
          maxLength: 1
          type: boolean
          example: false
        status:
          maxLength: 16
          type: string
          example: CLEAR
        tier:
          type: string
          description: |
            This read only value relates to the B2C Comerce realm of the customer.
              - XS = Bronze and Bronze+
              - S = Silver and Silver+
              - M = Gold and Gold+
              - L = Platinum and Platinum+
          enum:
            - XS
            - S
            - M
            - L
          example: L
        requestQuotaPerMinute:
          type: number
          description: This read only value shows the the number of requests that can be made per minute.
          example: 8000
      description: Tenant
      additionalProperties: true
    ErrorResponse:
      type: object
      additionalProperties: true
      properties:
        title:
          description: "A short, human-readable summary of the problem\ntype.  It will not change from occurrence to occurrence of the \nproblem, except for purposes of localization\n"
          type: string
          maxLength: 256
          example: You do not have enough credit
        type:
          description: |
            A URI reference [RFC3986] that identifies the
            problem type.  This specification encourages that, when
            dereferenced, it provide human-readable documentation for the
            problem type (e.g., using HTML [W3C.REC-html5-20141028]).  When
            this member is not present, its value is assumed to be
            "about:blank". It accepts relative URIs; this means
            that they must be resolved relative to the document's base URI, as
            per [RFC3986], Section 5.
          type: string
          maxLength: 2048
          example: NotEnoughMoney
        detail:
          description: A human-readable explanation specific to this occurrence of the problem.
          type: string
          example: Your current balance is 30, but that costs 50
        instance:
          description: |
            A URI reference that identifies the specific
            occurrence of the problem.  It may or may not yield further
            information if dereferenced.  It accepts relative URIs; this means
            that they must be resolved relative to the document's base URI, as
            per [RFC3986], Section 5.
          type: string
          maxLength: 2048
          example: /account/12345/msgs/abc
      required:
        - title
        - type
        - detail
    TenantDto:
      required:
        - tenantId
        - contact
        - description
        - emailAddress
        - merchantName
        - phoneNo
      type: object
      properties:
        tenantId:
          maxLength: 8
          type: string
          example: aaaa_prd
        merchantName:
          maxLength: 256
          type: string
          description: Name of the merchant.
          example: Merchant Name
        description:
          maxLength: 256
          type: string
          example: Additional information about the tenant.
        contact:
          maxLength: 256
          type: string
          example: Name of the merchant's designated contact.
        emailAddress:
          maxLength: 200
          type: string
          description: Email address of the designated contact.
          example: joe.shopper@foo.org
        phoneNo:
          maxLength: 50
          type: string
          description: Phone number of the designated contact.
          example: +1 000-000-0000
      description: Create or update tenants
    Client:
      required:
        - callbackUri
        - channels
        - clientId
        - name
        - redirectUri
        - scopes
        - secret
      type: object
      properties:
        clientId:
          type: string
          maxLength: 100
          description: Client ID
          example: fd0d4ab9-bb85-4c04-bebd-589bd74bdd75
        name:
          type: string
          maxLength: 100
          description: Client Name
          example: Client Name
        secret:
          type: string
          maxLength: 256
          description: Client Secret. The secret will only display on create and if the secret was updated when updating the client.
          example: client-secret
        scopes:
          items:
            type: string
            maxLength: 100
            example: sfcc.products sfcc.catalogs sfcc.customers:ro
          type: array
          description: "Merchant scopes. These scopes allows different permissions in SLAS and B2C commerce. \nShopper Custom Objects additionally provides a way to do granular scoping besides the standard `sfcc.shopper-custom-objects` like `sfcc.shopper-custom-objects.xyz`\nSLAS is capable of handling a maximum of 20 Custom Object scopes.\n\nFor B2C Commerce scope details, see the [Authorization Scopes Catalog](https://developer.salesforce.com/docs/commerce/commerce-api/guide/auth-z-scope-catalog.html).\""
          example:
            - sfcc.products
            - sfcc.catalogs
            - sfcc.customers:ro
        redirectUri:
          type: string
          maxLength: 2048
          description: An absolute URL, beginning with a protocol
          example: https://www.salesforce.com
        callbackUri:
          type: string
          maxLength: 2048
          description: An absolute URL, beginning with a protocol
          example: https://www.salesforce.com
        channels:
          items:
            type: string
            example: RefArch SiteGenesis
            maxLength: 1024
          type: array
          description: Client Channels
          example:
            - RefArch
            - SiteGenensis
        isPrivateClient:
          type: boolean
          description: Private or Public Client
          example: true
        loginEpRestrict:
          type: boolean
          maxLength: 1
          description: When enabling (true) this will restrict all calls to the `\login` endpoint for the Client Id. When calling the `\login` endpoint and `loginEpRestrict` is enabled a HTTP Status code of 403 will be returned.
          example: false
    ClientListResponse:
      required:
        - data
      type: object
      properties:
        data:
          items:
            $ref: '#/components/schemas/Client'
          type: array
          description: An array of clients.
    ClientRequest:
      required:
        - channels
        - clientId
        - isPrivateClient
        - name
        - redirectUri
        - scopes
        - secret
      type: object
      properties:
        name:
          type: string
          description: Client Name
          example: High Adventure Wear
          maxLength: 100
        clientId:
          type: string
          description: SLAS client id. Must match the query parameter.
          example: fd0d4ab9-bb85-4c04-bebd-589bd74bdd75
          maxLength: 100
        secret:
          type: string
          description: SLAS client secret. On create if left blank then a secret will be generated.
          example: client_secret
          maxLength: 256
        scopes:
          items:
            type: string
            example: sfcc.products sfcc.catalogs sfcc.customers:ro
            maxLength: 4096
          type: array
          description: "Merchant scopes. These scopes allows different permissions in SLAS and B2C commerce. \nShopper Custom Objects additionally provides a way to do granular scoping besides the standard `sfcc.shopper-custom-objects` like `sfcc.shopper-custom-objects.xyz` \nSLAS is capable of handling a maximum of 20 Custom Object scopes.\""
          example:
            - sfcc.products
            - sfcc.catalogs
            - sfcc.customers:ro
        redirectUri:
          items:
            type: string
            example: http://localhost:3000/callback
            maxLength: 2048
          type: array
          description: Array of SLAS redirect URLs. Include protocol and domain name in each URL. Wildcards supported.
          example:
            - http://localhost:3000/callback
            - https://*.example.com/callback
        callbackUri:
          items:
            type: string
            example: localhost:3000/passwordless-login-callback
            maxLength: 2048
          type: array
          description: Array of SLAS callback URLs that will be used for passworless login and password reset when mode=callback. Include protocol and domain name in each URL. Wildcards are NOT supported.
          example:
            - http://localhost:3000/password-reset-callback
            - http://localhost:3000/passwordless-login-callback
        channels:
          items:
            type: string
            example: RefArch SiteGenesis
            maxLength: 1024
          type: array
          description: Client Channels
          example:
            - RefArch
            - SiteGenensis
        isPrivateClient:
          type: boolean
          description: Private or Public Client. If left blank the client will default to private.
          example: true
        loginEpRestrict:
          type: boolean
          description: When enabling (true) this will restrict all calls to the `\login` endpoint for the Client Id. When calling the `\login` endpoint and `loginEpRestrict` is enabled a HTTP Status code of 403 will be returned.
          example: false
      description: Used to create and update a SLAS Client
    PasswordTemplateActionType:
      type: string
      description: "Describes the type of action that the password action template will be used for. \nHere are the actions that each enumerated string refers to:\n  - `PWDLESS_LOGIN`: Passwordless login\n  - `PWD_RESET_ACTION`: Password reset\n  - `PWD_FORGOT_ACTION`: Forgot password"
      enum:
        - PWDLESS_LOGIN
        - PWD_RESET_ACTION
        - PWD_FORGOT_ACTION
      example: PWDLESS_LOGIN
    PasswordTemplateType:
      type: string
      description: Identifies the type of mode that the password action template will be used for.
      enum:
        - SMS
        - EMAIL
      example: EMAIL
    PasswordActionTemplate:
      required:
        - actionType
        - channelId
        - link
        - locale
        - name
        - subject
        - template
        - templateType
      type: object
      properties:
        channelId:
          maxLength: 36
          type: string
          example: SiteGenesis
        name:
          maxLength: 128
          type: string
          example: Password Action Email Template
        subject:
          maxLength: 128
          type: string
          example: Password Action Token Request
        link:
          maxLength: 2048
          type: string
          example: 'This is your password action token: ${token}'
        locale:
          maxLength: 16
          type: string
          description: Identifies the locale of the template. Must be one of the [language tag strings supported by JDK 11](https://www.oracle.com/java/technologies/javase/jdk11-suported-locales.html). The string is stored in all lowercase.
          example: en-us
        actionType:
          $ref: '#/components/schemas/PasswordTemplateActionType'
        templateType:
          $ref: '#/components/schemas/PasswordTemplateType'
        template:
          maxLength: 2048
          type: string
          example: |-
            Passwordless Login Token Request
            You're receiving this because you requested a passwordless login token for your account. ${link}
    IdentityProviderResponse:
      required:
        - authUrl
        - clientId
        - clientSecret
        - isClientCredsBody
        - isPreferred
        - name
        - redirectUrl
        - scopes
        - tokenInfoUrl
        - tokenUrl
        - userInfoUrl
      type: object
      description: Identity provider Response
      properties:
        name:
          type: string
          description: Identity Provider Name
          maxLength: 200
          example: google
        authUrl:
          type: string
          description: IDP authorization URL
          maxLength: 256
          example: https://www.salesforce.com/authorize
        tokenUrl:
          type: string
          description: IDP token URL
          maxLength: 256
          example: https://www.salesforce.com/token
        tokenInfoUrl:
          type: string
          description: IDP token info URL
          maxLength: 256
          example: https://www.salesforce.com/inspect
        userInfoUrl:
          type: string
          description: IDP user info URL
          maxLength: 256
          example: https://www.salesforce.com/userinfo
        redirectUrl:
          type: string
          description: Redirect URL to go to after IDP flow is complete. This URL must be registered with the IDP.
          maxLength: 256
          example: https://www.salesforce.com/idp/callback
        wellKnownUrl:
          type: string
          description: IDP to get OIDC configuration.
          maxLength: 256
          example: https://www.salesforce.com/.well-known/openid-configuration
        clientId:
          type: string
          description: Client Id of the third party IDP.
          maxLength: 128
          example: 934277749308-02dg4398n3s31ofge8cot46jirn3kpkf.apps.googleusercontent.com
        clientSecret:
          type: string
          description: Client Secret of the third party IDP. For Apple copy the contents from the .p8 file that was downloaded from Apple between -*----BEGIN PRIVATE KEY-----* and -*---END PRIVATE KEY-----* markers.
          maxLength: 512
          example: aKZM1xEnZopNP2bm2gc3GKex
        isPreferred:
          type: boolean
          description: Indicates if the IDP configuration is the Preferred SLAS IDP for the Tenant Id.
          maxLength: 1
          example: true
        isClientCredsBody:
          type: boolean
          description: Default is to place the client credentials in a basic authorization header for the call to the IDP. If true, the client credentials are placed in the POST body to the IDP.
          maxLength: 1
          example: false
        scopes:
          type: array
          items:
            type: string
            maxLength: 8192
            example: openid email profile
          description: Scopes needed by the IDP.
          example:
            - oidc
            - email
            - profile
        teamId:
          type: string
          description: Apple Team ID. Used primarily for Sign with Apple in generating the client secret.
          maxLength: 32
          example: appleTeamId
        keyId:
          type: string
          description: Apple key ID. This is the Key ID that was obtained from Apple when the the private key for client authentication was created. Used primarily for Sign with Apple in generating the client secret.
          maxLength: 8192
          example: appleKeyId
        loginMergeClaims:
          items:
            type: string
            maxLength: 256
            example: email
          type: array
          description: |
            List of user info claims that can be used as identifiers to look up and merge with an existing B2C Commerce profile for a registered shopper or an existing B2C Commerce profile created via federated login with an external Identity Provider with the same merge claim as this one. If multiple matching B2C Commerce shopper (customer) profiles are found, the external profile is merged with the most recently created shopper (customer) profile. Refer to the Merge Shopper Profiles user guide for more details.

            Note: When configuring an Apple IDP, 'email' and 'sub' are the only supported merge claims.
          example:
            - email
            - phone
        oidcClaimMapper:
          items:
            type: string
            maxLength: 1024
            example: accessToken=access refresh_token accessTokenTTL=expires_in idToken=id_token subject=sub email=email userId=sub familyName=family_name givenName=given_name name=name
          type: array
          description: Mapping from the identity provider’s token claims for SLAS to get user information values when the user successfully authenticates. The values in this array should be setup using the following `key=value` pair pattern. The key part is the SLAS key with the value part being the OIDC claim key.
          example:
            - accessToken=access_token
            - refreshToken=refresh_token
            - accessTokenTTL=expires_in
            - idToken=id_token
            - subject=sub
            - email=email
            - userId=sub
            - familyName=family_name
            - givenName=given_name
            - name=name
    IdpListResponse:
      required:
        - data
      type: object
      properties:
        data:
          items:
            $ref: '#/components/schemas/IdentityProviderResponse'
          type: array
          description: An array of identity providers.
    IdentityProvider:
      required:
        - authUrl
        - clientId
        - clientSecret
        - isClientCredsBody
        - name
        - redirectUrl
        - scopes
        - tokenInfoUrl
        - tokenUrl
        - userInfoUrl
        - wellKnownUrl
      type: object
      properties:
        name:
          type: string
          description: Identity Provider Name
          maxLength: 200
          example: google
          enum:
            - adfs
            - apple
            - auth0
            - azure
            - cognito
            - facebook
            - forgerock
            - gigya
            - gigya_social
            - google
            - okta
            - ping
            - salesforce
        authUrl:
          type: string
          description: IDP authorize URL
          maxLength: 256
          example: https://www.salesforce.com/authorize
        tokenUrl:
          type: string
          description: IDP token URL
          maxLength: 256
          example: https://www.salesforce.com/token
        tokenInfoUrl:
          type: string
          description: IDP token info URL
          maxLength: 256
          example: https://www.salesforce.com/introspect
        userInfoUrl:
          type: string
          description: IDP user info URL
          maxLength: 256
          example: https://www.salesforce.com/userinfo
        redirectUrl:
          type: string
          description: Redirect URL to go to after IDP flow is complete. This URL must be registered with the IDP.
          maxLength: 256
          example: https://www.salesforce.com/idp/callback
        wellKnownUrl:
          type: string
          description: IDP URL to get OIDC configuration.
          maxLength: 256
          example: https://www.salesforce.com/.well-known/openid-configuration
        clientId:
          type: string
          description: Client Id of the third party IDP.
          maxLength: 128
          example: 934277749308-02dg4398n3s31ofge8cot46jirn3kpkf.apps.googleusercontent.com
        clientSecret:
          type: string
          maxLength: 512
          description: Client Secret of the third party IDP. For Apple copy the contents from the .p8 file that was downloaded from Apple between -*----BEGIN PRIVATE KEY-----* and -*---END PRIVATE KEY-----* markers.
          example: aKZM1xEnZopNP2bm2gc3GKex
        preferenceValue:
          type: boolean
          description: Set the IDP configuration as the Preferred SLAS IDP. Default value is `false`.
          maxLength: 1
          example: true
        isClientCredsBody:
          type: boolean
          description: Default is to place the client credentials in a basic authorization header for the call to the IDP. If true, the client credentials are placed in the POST body to the IDP.
          maxLength: 1
          example: false
        useWellKnown:
          type: boolean
          description: If set to `true`, SLAS uses the `wellKnowUrl` value to populate the `authUrl`, `tokenUrl`, `userInfoUrl`, and `scopes` values from the identity provider. Default value is `false`.
          maxLength: 1
          example: false
        scopes:
          items:
            type: string
            maxLength: 8192
            example: openid email profile
          type: array
          description: IDP Scopes
          example:
            - oidc
            - email
            - profile
        teamId:
          type: string
          description: Apple Team Id. Used primarily for Sign with Apple in generating the client secret.
          maxLength: 32
          example: appleTeamId
        keyId:
          type: string
          description: Apple key id. This is the Key ID that was obtained from Apple when the the private key for client authentication was created. Used primarily for Sign with Apple in generating the client secret.
          maxLength: 32
          example: appleKeyId
        loginMergeClaims:
          items:
            type: string
            maxLength: 256
            example: email
          type: array
          description: |
            List of user info claims that can be used as identifiers to look up and merge with an existing B2C Commerce profile for a registered shopper or an existing B2C Commerce profile created via federated login with an external Identity Provider with the same merge claim as this one. If multiple matching B2C Commerce shopper (customer) profiles are found, the external profile is merged with the most recently created shopper (customer) profile. Refer to the Merge Shopper Profiles user guide for more details.
            Note: When configuring an Apple IDP, 'email' and 'sub' are the only supported merge claims.
          example:
            - email
            - phone
        oidcClaimMapper:
          items:
            type: string
            maxLength: 1024
            example: accessToken=access_token efreshToken=refresh_token accessTokenTTL=expires_in idToken=id_token subject=sub email=email userId=sub familyName=family_name givenName=given_name name=name
          type: array
          description: Mapping from the identity provider’s token claims for SLAS to get user information values when the user successfully authenticates. The values in this array should be setup using the following `key=value` pair pattern. The key part is the SLAS key with the value part being the OIDC claim key.
          example:
            - accessToken=access_token
            - refreshToken=refresh_token
            - accessTokenTTL=expires_in
            - idToken=id_token
            - subject=sub
            - email=email
            - userId=sub
            - familyName=family_name
            - givenName=given_name
            - name=name
      description: Identity provider
  examples:
    Tenant:
      value:
        createdBy: slas
        modifiedBy: slas
        createdTime: 2021-02-25T00:55:54.119+0000
        modifiedTime: 2021-02-25T00:55:54.119+0000
        tenantId: slsa_dev
        merchantId: 2
        description: SLAS Default Tenant Two
        contact: Tenant Two
        emailAddress: tenant2@slas.tst
        phoneNo: 111-222-4444
        tier: S
        requestQuotaPerMinute: 8000
        isDeleted: false
        status: CLEAR
    TenantRequestException400:
      value:
        type: TenantRequestException
        title: Unable to retrieve resource because the tenant id was invalid
        detail: Tenant id is invalid
    TenantException401:
      value:
        type: TenantException
        title: Unable to retrieve resource because the tenant id was invalid
        detail: Tenant id is invalid
    TenantNotFoundException404:
      value:
        type: TenantNotFoundException
        title: Unable to retrieve resource because no resource was found with that value
        detail: Tenant id Not Found
    TenantDto:
      value:
        tenantId: slsa_dev
        merchantName: Popular Merchant
        description: Merchant Description
        contact: Jerry Smith
        emailAddress: jerry@merchant.com
        phoneNo: 801-555-1234
    TenantUpdateException400:
      value:
        type: TenantUpdateException
        title: Unable to retrieve resource because the tenant id was invalid
        detail: Tenant id was not updated
    TenantUpdateException401:
      value:
        type: TenantUpdateException
        title: Unable to retrieve resource because the tenant id was invalid
        detail: Tenant id was not updated
    TenantAlreadyExistsException409:
      value:
        type: TenantAlreadyExistsException
        title: Tenant[abcd_prd] already exists!
        detail: Tenant already exists
    ClientListResponse:
      value:
        data:
          - clientId: a462b606-317c-4a3c-90a7-4b0b938f3807
            secret: ''
            name: Shop Mart
            scopes:
              - sfcc.products sfcc.catalogs sfcc.products.ro
            redirectUri: http://localhost:9010/callback
            callbackUri: http://localhost:9010/pwd/reset/callback
            channels:
              - SiteGenesis
              - OtherSite
            isPrivateClient: true
            loginEpRestrict: false
          - clientId: 726bde86-7b99-415d-98ec-9290bad18904
            secret: ''
            name: High Adventure Wear
            scopes:
              - sfcc.products sfcc.catalogs sfcc.products.ro
            redirectUri: http://localhost:9010/callback
            callbackUri: http://localhost:9010/pwd/reset/callback
            channels:
              - SiteGenesis
              - OtherSite
            isPrivateClient: true
            loginEpRestrict: false
          - clientId: slas-default-client-1
            secret: ''
            name: Shop Salesforce
            scopes:
              - sfcc.products.ro sfcc.catalogs.ro
            redirectUri: http://localhost:9010/callback
            callbackUri: http://localhost:9010/pwd/reset/callback
            channels:
              - SiteGenesis
              - OtherSite
            isPrivateClient: true
            loginEpRestrict: false
    ClientTenantException401:
      value:
        type: ClientTenantException
        title: Unable to retrieve resource because the tenant id was invalid
        detail: Tenant id was not found. Please check the tenant id.
    ClientNotFoundException404:
      value:
        type: ClientNotFoundException
        title: Unable to retrieve resource because no resource was found with that value
        detail: Client Not Found
    Client:
      value:
        clientId: client-id1
        name: High Adventure Wear
        secret: secret1234
        scopes:
          - sfcc.products sfcc.catalogs sfcc.customers:ro
        redirectUri: http://localhost/callback
        callbackUri: http://localhost:9010/pwd/reset/callback
        channels:
          - SiteGenesis
          - OtherSite
        isPrivateClient: true
        loginEpRestrict: false
    ClientRequestException400:
      value:
        type: ClientRequestException
        title: Unable to retrieve resource because the client id was invalid
        detail: Client id is invalid
    ClientRequest:
      value:
        clientId: client-id1
        secret: secret12345
        name: High Adventure Wear
        scopes:
          - sfcc.products
          - sfcc.catalogs
          - sfcc.products.ro
        redirectUri:
          - http://localhost:9010/callback
        callbackUri:
          - http://localhost:9010/pwd/reset/callback
        channels:
          - SiteGenesis
          - OtherSite
        isPrivateClient: true
        loginEpRestrict: false
    ClientWithSecret:
      value:
        clientId: client-id1
        name: High Adventure Wear
        secret: secret12345
        scopes:
          - sfcc.products
          - sfcc.catalogs
          - sfcc.customers:ro
        redirectUri: http://localhost:9010/callback
        callbackUri: http://localhost:9010/pwd/reset/callback
        channels:
          - SiteGenesis
          - OtherSite
        isPrivateClient: true
        loginEpRestrict: false
    ClientConflictException409:
      value:
        type: ClientConflictException
        title: Unable to create resource because a duplicate resource was found
        detail: Client was not created. Duplicate resource was found.
    PasswordActionTemplate:
      value:
        channelId: SiteGenesis
        name: Passwordless SMS Template
        subject: Passwordless Token Request
        link: 'This is your passwordless token: ${token}'
        locale: en-us
        actionType: PWDLESS_LOGIN
        templateType: SMS
        template: |-
          Passwordless Login Token Request

          Hello ${name},
          You're receiving this because you requested a passwordless login token for your account.
          ${link}
    BadRequestException400:
      value:
        type: BadRequestException
        title: Unable to update resource because the request body was invalid
        detail: Request body is invalid.
    PasswordActionTemplateNotFoundException404:
      value:
        type: PasswordActionTemplateNotFoundException
        title: Template was not found
        detail: Template was not found.
    PasswordActionTemplateRequest:
      value:
        channelId: SiteGenesis
        name: Passwordless SMS Template
        subject: Passwordless Token Request
        link: 'This is your passwordless token: ${token}'
        locale: en-us
        actionType: PWDLESS_LOGIN
        templateType: SMS
        template: |-
          Passwordless Login Token Request
          Hello ${name},
          You're receiving this because you requested a passwordless login token for your account.
          ${link}
    PasswordActionTemplateCreateException400:
      value:
        type: PasswordActionTemplateCreateException
        title: Template was not created or updated
        detail: Template was not created or updated.
    PasswordActionTemplateDeleteException400:
      value:
        type: PasswordActionTemplateDeleteException
        title: Template was not deleted
        detail: Template was not deleted.
    IdpListResponse:
      value:
        data:
          - name: google
            clientId: idp-client-id
            clientSecret: idp-secret
            authUrl: https://accounts.google.com/o/oauth2/v2/auth
            tokenUrl: https://oauth2.googleapis.com/token
            tokenInfoUrl: https://oauth2.googleapis.com/tokeninfo
            userInfoUrl: https://www.googleapis.com/oauth2/v3/userinfo
            redirectUrl: http://localhost:9010/hydra/callback
            wellKnownUrl: https://accounts.google.com/.well-known/openid-configuration
            scopes:
              - openid
              - email
              - profile
            isPreferred: true
            isClientCredsBody: false
            teamId: appleTeamId
            keyId: appleKeyId
            loginMergeClaims:
              - email
            oidcClaimMapper:
              - accessToken=access_token
              - refreshToken=refresh_token
              - accessTokenTTL=expires_in
              - idToken=id_token
              - subject=sub
              - email=email
              - userId=sub
              - familyName=family_name
              - givenName=given_name
              - name=name
          - name: Facebook
            clientId: idp-client-id
            clientSecret: idp-secret
            authUrl: https://www.facebook.com/v19.0/dialog/oauth
            tokenUrl: https://graph.facebook.com/v19.0/oauth/access_token
            tokenInfoUrl: https://graph.facebook.com/v19.0/debug_token
            userInfoUrl: https://graph.facebook.com/v19.0/me
            redirectUrl: http://my.host.com/api/v1/idp/callback/Facebook
            wellKnownUrl: https://www.facebook.com/.well-known/openid-configuration
            scopes:
              - openid
              - email
              - profile
            isPreferred: true
            isClientCredsBody: false
            teamId: appleTeamId
            keyId: appleKeyId
            loginMergeClaims:
              - email
            oidcClaimMapper:
              - accessToken=access_token
              - refreshToken=refresh_token
              - accessTokenTTL=expires_in
              - idToken=id_token
              - subject=sub
              - email=email
              - userId=sub
              - familyName=family_name
              - givenName=given_name
              - name=name
    IdpRequestException400:
      value:
        type: IdpRequestException
        title: Unable to update resource because the request body was invalid
        detail: Request body is invalid.
    IdpTenantException401:
      value:
        type: IdpTenantException
        title: Unable to update resource because the tenant id was invalid
        detail: Tenant id is invalid
    IdpNotFoundException404:
      value:
        type: IdpNotFoundException
        title: Unable to update resource because no resource was found with that value
        detail: Idp Not Found
    IdentityProvider:
      value:
        name: google
        clientId: idp-client-id
        clientSecret: idp-secret
        authUrl: https://accounts.google.com/o/oauth2/v2/auth
        tokenUrl: https://oauth2.googleapis.com/token
        tokenInfoUrl: https://oauth2.googleapis.com/tokeninfo
        userInfoUrl: https://www.googleapis.com/oauth2/v3/userinfo
        redirectUrl: http://localhost:9010/hydra/callback
        wellKnownUrl: https://accounts.google.com/.well-known/openid-configuration
        scopes:
          - openid
          - email
          - profile
        preferenceValue: true
        isClientCredsBody: false
        teamId: appleTeamId
        keyId: appleKeyId
        loginMergeClaims:
          - email
        oidcClaimMapper:
          - accessToken=access_token
          - refreshToken=refresh_token
          - accessTokenTTL=expires_in
          - idToken=id_token
          - subject=sub
          - email=email
          - userId=sub
          - familyName=family_name
          - givenName=given_name
          - name=name
    IdpProviderResponse:
      value:
        name: google
        clientId: idp-client-id
        clientSecret: idp-secret
        authUrl: https://accounts.google.com/o/oauth2/v2/auth
        tokenUrl: https://oauth2.googleapis.com/token
        tokenInfoUrl: https://oauth2.googleapis.com/tokeninfo
        userInfoUrl: https://www.googleapis.com/oauth2/v3/userinfo
        redirectUrl: http://localhost:9010/hydra/callback
        wellKnownUrl: https://accounts.google.com/.well-known/openid-configuration
        scopes:
          - openid
          - email
          - profile
        isPreferred: true
        isClientCredsBody: false
        teamId: appleTeamId
        keyId: appleKeyId
        loginMergeClaims:
          - email
        oidcClaimMapper:
          - accessToken=access_token
          - refreshToken=refresh_token
          - accessTokenTTL=expires_in
          - idToken=id_token
          - subject=sub
          - email=email
          - userId=sub
          - familyName=family_name
          - givenName=given_name
          - name=name
    IdpConflictException409:
      value:
        type: IdpConflictException
        title: Unable to create resource because a duplicate resource was found
        detail: Idp was not created. Duplicate resource was found.
    ShopperDeleteException400:
      value:
        type: ShopperDeleteException
        title: Email address does not match stored email address
        detail: Email address does not match stored email address
    ShopperNotFoundException404:
      value:
        type: ShopperNotFoundException
        title: SLAS USER was not found by customer id
        detail: SLAS USER was not found by customer id
