swagger: '2.0'
info:
  title: Banking Products
  description: >
    This API manages the set of banking products that a financial institution offers to its customers. Each bank _account_ is associated with a
    _product_. <p> Examples of products are a personal savings account product or a business checking account product. Each product also has a
    _product type_ (for example, DDA for a checking or demand deposit account) and a _subtype_ which is a more specific type, such as 'Interest
    Checking'. <p> Each account is attached to the product instance that was effective and active when account was created. Product types may also
    have subtypes, although subtypes may not have deeper subtypes. When the terms and conditions of a product changes, this constititutes a new
    _revision_ of the product. Business rules (which are not part of this service) dictate whether all accounts which are attached to the product
    remain attached to the previous revision of the product or are attached to the newer revision or when and how this occurs. Similarly, business
    rules and other services may provide notification to users of changes in terms of use, etc. Products and product types each have a `name`, a
    `description` a `label`, and a `state`. <p> The state may be one of the following:

      * *`pending`* In creation, not yet used or available for use.
      Only pending items may be deleted.
      * *`active`* Active and in use or available for use
      * *`inactive`* Not available for use (deactivated)
      * *`removed`* Removed and archived. Removed items are not eligible to be activated.
      When an account is removed, its name is changed so that the name
      may be used for new products or product types.
    <p> After creating a product type or product subtype, which by default leaves the resource in the `pending` state, the caller should also activate
    it via the `apiture:activate` link in the response. Pending resources which have not been activated may be deleted after an expiration period. <p>
    Allowed state transitions are:

      * `pending -> active`
      * `pending -> inactive`
      * `active -> inactive`
      * `inactive -> active`
      * `active -> removed`
      * `inactive -> removed`
    <p> A product or product type may only be deleted if its `state` is `pending`. A product or type may only change to `inactive` if it is not
    currently in use by active accounts or active products. Products and product types include links which convey the allowed POST operations, such as
    `apiture:activate`, `apiture:deactivate`, or `apiture:remove`. <p> In addition, a product has `newAccountAvailability` which indicates if that
    product is available for opening new accounts. **TODO** The `newAccountAvailability` in the product resource is currently mutable but it will
    become immutable and derived only. The value is derived from the existence of the product in the `unlockedProducts` collection. <p> This resource
    is a copy of the banking product resources in the bank core. In some cases, the Apiture platform does not have programmatic access to that core,
    so when  when a financial institution updates the banking products in the core, they must *also* use this API to update the Apiture copy.


    # Error Types


    Error responses in this API may have one of the `type` values described below.

    See [Errors](https://developer.apiture.com/docs/concepts/errors) for more information

    on error responses and error types.




    ## <span class='errorType' id="err-accessDenied">accessDenied</span>


    **Description**: The credentials supplied in the request are insufficient to grant access. <br>

    **Remediation**: Check the supplied credentials for validity.



    ## <span class='errorType' id="err-invalidProductId">invalidProductId</span>


    **Description**: No Products were found for the specified productId. <br>

    **Remediation**: Check to make sure that the supplied productId corresponds to an apiture product resource.



    ## <span class='errorType' id="err-invalidProductTypeId">invalidProductTypeId</span>


    **Description**: No product types were found for the specified productTypeId. <br>

    **Remediation**: Check to make sure that the supplied productType corresponds to an apiture product type resource.



    ## <span class='errorType' id="err-ifMatchHeaderMissing">ifMatchHeaderMissing</span>


    **Description**: Precondition Required. The request did not include the required if-Match header. <br>

    **Remediation**: Resubmit with the operation, supplying the value of the ETag and the most recent state of the resource.



    ## <span class='errorType' id="err-ifMatchHeaderDoesntMatch">ifMatchHeaderDoesntMatch</span>


    **Description**: The supplied `if-Match` header value does not match the most recent `ETag` response header value. The resource has changed in the
    interim. <br>

    **Remediation**: Resubmit the operation, supplying the value of the ETag and the most recent state of the resource.



    ## <span class='errorType' id="err-malformedProduct">malformedProduct</span>


    **Description**: The supplied product was malformed. <br>

    **Remediation**: Check to make sure that the supplied product parameter corresponds to an apiture product resource.


    The `attributes` object in the error may have the following properties:


    | Property | Type | Description |

    |----------|------|-------------|

    | product | string | The URI or the ID of an existing product |



    ## <span class='errorType' id="err-malformedProductType">malformedProductType</span>


    **Description**: The supplied productType was malformed. <br>

    **Remediation**: Check to make sure that the supplied productType corresponds to an apiture productType resource.


    The `attributes` object in the error may have the following properties:


    | Property | Type | Description |

    |----------|------|-------------|

    | productType | string | The invalid product type URI. |



    ## <span class='errorType' id="err-malformedRequestBody">malformedRequestBody</span>


    **Description**: The supplied request body was malformed. <br>

    **Remediation**: Check to make sure that your request body exists and that it does not contain syntax errors.



    ## <span class='errorType' id="err-malformedCreateProductBody">malformedCreateProductBody</span>


    **Description**: The supplied request body to create a product did not contain a description or label. <br>

    **Remediation**: Resubmit the request with a description and label in the body.



    ## <span class='errorType' id="err-canOnlyLockUnlockActive">canOnlyLockUnlockActive</span>


    **Description**: You can only lock or unlock a product if its state is `active`. <br>

    **Remediation**: Activate the product and resubmit the operation.



    ## <span class='errorType' id="err-invalidProductState">invalidProductState</span>


    **Description**: The supplied product state is invalid. <br>

    **Remediation**: Resubmit the operation, supplying a valid product state.


    The `attributes` object in the error may have the following properties:


    | Property | Type | Description |

    |----------|------|-------------|

    | validStates | [string] | The required states for this operation |



    ## <span class='errorType' id="err-invalidAccountAvailability">invalidAccountAvailability</span>


    **Description**: The product new account availability is not valid. <br>

    **Remediation**: Resubmit the operation and supply a valid product new account availability value.



    ## <span class='errorType' id="err-invalidTransactionTypes">invalidTransactionTypes</span>


    **Description**: The given transaction type is not valid. <br>

    **Remediation**: Resubmit the operation and supply a valid transaction type.



    ## <span class='errorType' id="err-invalidConstraintMaxFundingAmount">invalidConstraintMaxFundingAmount</span>


    **Description**: The given maximumFundingAmount value is not valid. <br>

    **Remediation**: Check to make sure the maximumFundingAmount is a valid numerical value. Also make sure the value is greater than minimum value
    and the value is greater than 0.



    ## <span class='errorType' id="err-invalidConstraintMaxTransferAmount">invalidConstraintMaxTransferAmount</span>


    **Description**: The given maximumTransferAmount value is not valid. <br>

    **Remediation**: Check to make sure the maximumTransferAmount is a valid numerical value. Also make sure the value is greater than minimum value
    and the value is greater than 0.



    ## <span class='errorType' id="err-invalidConstraintMinBalance">invalidConstraintMinBalance</span>


    **Description**: The given minimumBalance value is not valid. <br>

    **Remediation**: Check to make sure the minimumBalance is a valid numerical value. Also make sure the value is greater than minimum value and the
    value is greater than 0.



    ## <span class='errorType' id="err-invalidConstraintMinFundingAmount">invalidConstraintMinFundingAmount</span>


    **Description**: The given minimumFundingAmount value is not valid. <br>

    **Remediation**: Check to make sure the minimumFundingAmount is a valid numerical value. Also make sure the value is greater than minimum value
    and the value is greater than 0.



    ## <span class='errorType' id="err-invalidConstraintMinTransferAmount">invalidConstraintMinTransferAmount</span>


    **Description**: The given minimumTransferAmount value is not valid. <br>

    **Remediation**: Check to make sure the minimumTransferAmount is a valid numerical value. Also make sure the value is greater than minimum value
    and the value is greater than 0.



    ## <span class='errorType' id="err-invalidConstraintItemAmount">invalidConstraintItemAmount</span>


    **Description**: The given fees item amount value is not valid. <br>

    **Remediation**: Check to make sure the fees item amount is a valid numerical value. Also make sure the value is greater than 0.



    ## <span class='errorType' id="err-invalidProductLinkToSubType">invalidProductLinkToSubType</span>


    **Description**: A link to apiture:productSubtype is missing or is invalid. <br>

    **Remediation**: Check to make sure the product has a valid subtype or that the subtype exists.



    ## <span class='errorType' id="err-invalidRateValues">invalidRateValues</span>


    **Description**: The rate object contains invalid values. <br>

    **Remediation**: Check the values of the rate object and resubmit.



    ## <span class='errorType' id="err-invalidFeesType">invalidFeesType</span>


    **Description**: The fee must be an array. <br>

    **Remediation**: Check the type of the fee field and resubmit.



    ## <span class='errorType' id="err-cannotPatchProductFields">cannotPatchProductFields</span>


    **Description**: A products _id and newAccountAvailability cannot be patched. <br>

    **Remediation**: Remove the _id and newAccountAvailability from the request body and try again.



    ## <span class='errorType' id="err-activateProductInvalidState">activateProductInvalidState</span>


    **Description**: Products may only be activated if they are in an inactive or pending state. <br>

    **Remediation**: Check the state of your Product and the applicable allowed state transitions in the Products API documentation.



    ## <span class='errorType' id="err-removeProductInvalidState">removeProductInvalidState</span>


    **Description**: Products may only be removed if they are in an inactive or active state. <br>

    **Remediation**: Check the state of your Product and the applicable allowed state transitions in the Products API documentation.



    ## <span class='errorType' id="err-deactivateProductInvalidState">deactivateProductInvalidState</span>


    **Description**: Products may only be deactivated if they are in a pending or active state. <br>

    **Remediation**: Check the state of your Product and the applicable allowed state transitions in the Products API documentation.



    ## <span class='errorType' id="err-deleteProductInvalidState">deleteProductInvalidState</span>


    **Description**: Products may only be deleted if they are in a pending state. <br>

    **Remediation**: Check the state of your Product and the applicable allowed state transitions in the Products API documentation.



    ## <span class='errorType' id="err-cannotChangeRateType">cannotChangeRateType</span>


    **Description**: The products rate type may not be changed once created. <br>

    **Remediation**: Remove the product and recreate it with the desired rate type or create a new product.



    ## <span class='errorType' id="err-productStateCannotBeAltered">productStateCannotBeAltered</span>


    **Description**: A products state cannot be altered using the PATCH operation. <br>

    **Remediation**: Check the API documentation for the /activeProducts, /inactiveProducts, /removedProducts, /lockedProducts, and /unlockedProducts
    endpoints.



    ## <span class='errorType' id="err-productNameInUse">productNameInUse</span>


    **Description**: The given product name is currently in use, and cannot be reused. <br>

    **Remediation**: Delete the product with the specified name, or use a different name.



    ## <span class='errorType' id="err-productCodeInUse">productCodeInUse</span>


    **Description**: The given product code is currently in use, and cannot be reused. <br>

    **Remediation**: Delete the product with the specified code, or use a different code.



    ## <span class='errorType' id="err-activateProductSubTypeInvalidState">activateProductSubTypeInvalidState</span>


    **Description**: The state of the resource may not be changed to active or inactive when the product type or subtype is still `pending`. <br>

    **Remediation**: Check the state of your product type and subtype and ensure it is not pending.



    ## <span class='errorType' id="err-productTypeDoesNotExist">productTypeDoesNotExist</span>


    **Description**: The given product type does not exist. <br>

    **Remediation**: Verify that the product type exists for the subtype or parent type and resubmit.



    ## <span class='errorType' id="err-deleteProductTypeInvalidState">deleteProductTypeInvalidState</span>


    **Description**: A product type may not be deleted if the state is anything other than pending, or if the type is used by a pending product. <br>

    **Remediation**: Check the state of the productType and ensure it is not pending. Also ensure that any products using the productType are not
    pending.



    ## <span class='errorType' id="err-removeProductTypeInvalidState">removeProductTypeInvalidState</span>


    **Description**: A product type may not be updated if the state is removed. <br>

    **Remediation**: Check the state of the productType and ensure it not removed.



    ## <span class='errorType' id="err-updateProductTypeInvalidState">updateProductTypeInvalidState</span>


    **Description**: A product type may not be removed if the state is anything other than inactive. <br>

    **Remediation**: Check the state of the productType and ensure it is inactive.



    ## <span class='errorType' id="err-cannotChangeRemovedProductTypeState">cannotChangeRemovedProductTypeState</span>


    **Description**: The state of a removed productType may not be changed. <br>

    **Remediation**: Check the state of the productType and ensure it is not removed.



    ## <span class='errorType' id="err-cannotUpdateProductTypeState">cannotUpdateProductTypeState</span>


    **Description**: The state of a productType cannot be changed using a PUT method. <br>

    **Remediation**: Check the API documentation for the /activeProductTypes, /inactiveProductTypes, and /removedProductTypes endpoints.



    ## <span class='errorType' id="err-invalidQueryParameterCombination">invalidQueryParameterCombination</span>


    **Description**: Do not use mutually exclusive query parameters. <br>

    **Remediation**: Use one or the other, but not both.


    The `attributes` object in the error may have the following properties:


    | Property | Type | Description |

    |----------|------|-------------|

    | mutuallyExclusiveQueryParameters | [string] | undefined<br>Example: `state,openable` |
  version: 0.16.1
  contact:
    name: Apiture
    url: 'https://developer.apiture.com'
    email: api@apiture.com
  termsOfService: 'https://developer.apiture.com/docs/Apiture-Open-API-License-Agreement.pdf'
schemes:
  - https
basePath: /products
consumes:
  - application/hal+json
  - application/json
produces:
  - application/hal+json
  - application/json
tags:
  - name: API
    description: Endpoints which describe this API.
  - name: Product
    description: Banking Products
  - name: Product Type
    description: Banking Product Types
paths:
  /productTypes:
    get:
      summary: Return a collection of product types
      description: >-
        Return a [paginated](https://developer.apiture.com/docs/concepts/pagination) [sortable](https://developer.apiture.com/docs/concepts/sorting)
        [filterable](https://developer.apiture.com/docs/concepts/filtering) [searchable](https://developer.apiture.com/docs/concepts/searchable)
        collection of product types. The [links](https://developer.apiture.com/docs/concepts/links) in the response include pagination links.
      operationId: getProductTypes
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product Type
      x-apiture-traits:
        sortBy:
          - state
          - type
          - name
          - subtype
        itemSchema: productType
        filters:
          state:
            filter:
              - eq
              - ne
              - in
          type:
            filter:
              - eq
              - ne
              - in
          name:
            filter:
              - eq
              - ne
              - lt
              - le
              - gt
              - ge
              - startsWith
              - endsWith
              - contains
              - search
          subtype:
            filter:
              - eq
              - ne
              - in
      parameters:
        - name: start
          in: query
          description: 'The zero-based index of the first product type in this page. The default, 0, represents the first page of the collection.'
          type: integer
          format: int64
          default: 0
        - name: limit
          in: query
          description: The maximum number of product type representations to return in this page.
          type: integer
          format: int32
          default: 100
        - name: sortBy
          in: query
          type: string
          description: 'Optional sort criteria. See [sort criteria format](https://developer.apiture.com/docs/concepts/sorting), such as `?sortBy=field1,-field2`.'
        - $ref: '#/parameters/nameQueryParam'
        - $ref: '#/parameters/typeQueryParam'
        - $ref: '#/parameters/subtypeQueryParam'
        - $ref: '#/parameters/stateQueryParam'
        - $ref: '#/parameters/filterQueryParam'
        - $ref: '#/parameters/qQueryParam'
        - name: parent
          in: query
          type: string
          description: >-
            Subset the product types to only those subtypes whose parent type is named by its product type URI. This implements the
            *`apiture:children`* link relation on a product type.
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productTypes'
        '400':
          $ref: '#/responses/400'
        '422':
          $ref: '#/responses/422'
    post:
      summary: Create a new product type
      description: >-
        Create a new product type or subtype. The request may include a parent type in order to create a subtype. The parent type may not be a
        subtype. The `name` must be unique and the `state` may not be `removed`. `POST` to the `apiture:activate` link after creating a product type
        to activate it.
      operationId: createProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product Type
      parameters:
        - name: productType
          in: body
          description: The data necessary to create a new product type.
          required: true
          schema:
            $ref: '#/definitions/createProductType'
        - name: copyOf
          in: query
          description: >-
            To make a copy of an existing product type, pass the URI of the original product type. Fields in the request body will override the values
            copied from the existing product type. The new name must be passed in the body, since names must be unique. A new unique `code` will be
            assigned to the copy.
          type: string
          format: uri
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/productType'
          headers:
            Location:
              description: >-
                The URI of the new resource. If the URI begins with / it is relative to the API root context. Else, it is a full URI starting with
                *`scheme`*`://host` .
              type: string
              format: uri
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update the resource.
              type: string
        '400':
          description: |-
            Bad Request. One of the request parameters to create a productType was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedRequestBody`](#err-malformedRequestBody)
            * [`invalidProductState`](#err-invalidProductState)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedRequestBody
            - invalidProductState
        '409':
          $ref: '#/responses/409ProdTypeConflict'
  '/productTypes/{productTypeId}':
    get:
      summary: Fetch a representation of this product type.
      description: >-
        Return a [HAL](https://developer.apiture.com/docs/concepts/hal) representation of this product type resource. See the description of the
        `productType` model schema for the links that may be found in a product type representation.
      operationId: getProductType
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/productTypeIdPathParam'
        - $ref: '#/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
          headers:
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product type resource.
              type: string
        '304':
          $ref: '#/responses/304'
        '404':
          $ref: '#/responses/404ProductType'
    put:
      summary: Update this product type
      description: >-
        Perform a complete replacement of this product type. Changes to the `state` follow the rules described in this API's description. <p> To
        change the state of a product type,  use the `apiture:activate`, `apiture:deactivate`, or `apiture:remove` links on the resource to `POST` the
        product type URI to one of the paths, `/activeProductTypes`, `/inactiveProductTypes`, `/removedProductTypes`. </p>
      operationId: updateProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/productTypeIdPathParam'
        - name: productType
          in: body
          required: true
          schema:
            $ref: '#/definitions/productType'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
          headers:
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product type resource.
              type: string
        '400':
          $ref: '#/responses/400'
        '404':
          $ref: '#/responses/404ProductType'
        '409':
          $ref: '#/responses/409ProdTypeConflict'
        '412':
          $ref: '#/responses/412'
        '422':
          $ref: '#/responses/422'
    patch:
      summary: Update this product type
      description: >-
        Perform a partial update of this product type. Fields which are omitted are not updated. Changes to the `state` follow the rules described in
        this API's description. <p> To change the state of a product type,  use the `apiture:activate`, `apiture:deactivate`, or `apiture:remove`
        links on the resource to  `/activeProductTypes`, `/inactiveProductTypes`, `/removedProductTypes`. </p>
      operationId: patchProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/productTypeIdPathParam'
        - name: productType
          in: body
          required: true
          schema:
            $ref: '#/definitions/productType'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
          headers:
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product type resource.
              type: string
        '400':
          description: |-
            Bad Request. One of the request parameters to patch a productType was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedProductType`](#err-malformedProductType)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedProductType
        '404':
          $ref: '#/responses/404ProductType'
        '409':
          $ref: '#/responses/409ProdTypeConflict'
        '412':
          $ref: '#/responses/412'
        '422':
          $ref: '#/responses/422'
    delete:
      summary: Delete this product type resource
      description: >-
        Delete this product type resource and any resources that are owned by it. A product type may only be deleted if its `state` is `pending`, and
        it is not in use by a product.
      operationId: deleteProductType
      security:
        - apiKey: []
          accessToken:
            - data/delete
      x-apiture-implemented: true
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/ifMatchHeaderParam'
        - $ref: '#/parameters/productTypeIdPathParam'
      responses:
        '204':
          $ref: '#/responses/204Deleted'
        '409':
          description: >-
            Conflict. A product type may not be deleted if the `state` is anything other than `pending`, or if the type is used by a `pending`
            product.
          schema:
            $ref: '#/definitions/errorResponse'
        '412':
          $ref: '#/responses/412'
  /products:
    get:
      summary: Return a collection of products
      description: >-
        Return a [paginated](https://developer.apiture.com/docs/concepts/pagination) [sortable](https://developer.apiture.com/docs/concepts/sorting)
        [filterable](https://developer.apiture.com/docs/concepts/filtering) [searchable](https://developer.apiture.com/docs/concepts/searchable)
        collection of products. The [links](https://developer.apiture.com/docs/concepts/links) in the response include pagination links.
      operationId: getProducts
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product
      x-apiture-traits:
        sortBy:
          - state
          - type
          - name
          - code
          - category
          - target
          - label
        itemSchema: product
        filters:
          code:
            filter:
              - eq
              - ne
              - in
          category:
            filter:
              - eq
              - ne
              - in
          openable:
            filter:
              - eq
              - ne
              - not
          name:
            filter:
              - eq
              - ne
              - lt
              - le
              - gt
              - ge
              - startsWith
              - endsWith
              - contains
              - search
          state:
            filter:
              - eq
              - ne
              - in
          target:
            filter:
              - eq
              - ne
            multiMatch: false
          type:
            filter:
              - eq
              - ne
              - in
          newAccountAvailability:
            filter:
              - eq
              - ne
            multiMatch: false
          ifxType:
            filter:
              - eq
              - ne
              - in
          _id:
            filter:
              - eq
              - in
      parameters:
        - name: start
          in: query
          description: 'The zero-based index of the first product in this page. The default, 0, represents the first page of the collection.'
          type: integer
          format: int64
          default: 0
        - name: limit
          in: query
          description: The maximum number of product representations to return in this page.
          type: integer
          format: int32
          default: 100
        - name: sortBy
          in: query
          type: string
          description: 'Optional sort criteria. See [sort criteria format](https://developer.apiture.com/docs/concepts/sorting), such as `?sortBy=field1,-field2`.'
        - $ref: '#/parameters/nameQueryParam'
        - $ref: '#/parameters/typeQueryParam'
        - $ref: '#/parameters/codeQueryParam'
        - $ref: '#/parameters/categoryQueryParam'
        - $ref: '#/parameters/stateQueryParam'
        - $ref: '#/parameters/targetQueryParam'
        - $ref: '#/parameters/ifxTypeQueryParam'
        - $ref: '#/parameters/filterQueryParam'
        - $ref: '#/parameters/qQueryParam'
        - name: openable
          type: boolean
          in: query
          description: >-
            If true, filter only by products whose `state` is `active` and `newAccountAvailability` is `available`. For example, `?openable=true` is
            equivalent to `?state=active&newAccountAvailability=available` .
        - name: newAccountAvailability
          in: query
          type: string
          description: Subset the result to only those whose `newAccountAvailability` property matches this value.
          enum:
            - available
            - notAvailable
        - name: productType
          in: query
          type: string
          description: >-
            Subset the result to only products that use the product type identified by this value. The value is the `_id` of a product type instance.
            (This query parameter is used to implement the *`apiture:products`* link relation on a product type resource.)
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/products'
        '400':
          $ref: '#/responses/400'
        '409':
          description: |-
            Conflict.  Query parameters are in conflict. Do not use both `?orderable=` and `?state=` query parameters.

            This error response may have one of the following `type` values:
            * [`invalidQueryParameterCombination`](#err-invalidQueryParameterCombination)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - invalidQueryParameterCombination
        '422':
          $ref: '#/responses/422'
    post:
      summary: Create a new product
      description: >-
        Create a new product from the given name, label, description, and product subtype. The request must contain links to an existing product
        subtype. The `name` must be unique and the `state` may not be `removed`. `POST` to the `apiture:activate` link after creating a product to
        activate it.
      operationId: createProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - name: product
          in: body
          description: The data necessary to create a new product.
          required: true
          schema:
            $ref: '#/definitions/createProduct'
        - name: copyOf
          in: query
          description: >-
            To make a copy of an existing product, pass the URI of the original product. Fields in the request body will override the values copied
            from the existing product. The new name must be passed in the body, since names must be unique.
          type: string
          format: uri
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/product'
          headers:
            Location:
              description: >-
                The URI of the new resource. If the URI begins with / it is relative to the API root context. Else, it is a full URI starting with
                *`scheme`*`://host` .
              type: string
              format: uri
            Content-Location:
              description: The `Content-Location` will contain the URI of the specific revision corresponding to this new product resource.
              type: string
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update the resource.
              type: string
        '400':
          description: |-
            Bad Request. One of the request parameters to create a product  was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedRequestBody`](#err-malformedRequestBody)
            * [`malformedCreateProductBody`](#err-malformedCreateProductBody)
            * [`invalidProductState`](#err-invalidProductState)
            * [`invalidAccountAvailability`](#err-invalidAccountAvailability)
            * [`invalidProductLinkToSubType`](#err-invalidProductLinkToSubType)
            * [`invalidTransactionTypes`](#err-invalidTransactionTypes)
            * [`invalidConstraintItemAmount`](#err-invalidConstraintItemAmount)
            * [`invalidConstraintMaxFundingAmount`](#err-invalidConstraintMaxFundingAmount)
            * [`invalidConstraintMaxTransferAmount`](#err-invalidConstraintMaxTransferAmount)
            * [`invalidConstraintMinBalance`](#err-invalidConstraintMinBalance)
            * [`invalidConstraintMinFundingAmount`](#err-invalidConstraintMinFundingAmount)
            * [`invalidConstraintMinTransferAmount`](#err-invalidConstraintMinTransferAmount)
            * [`invalidRateValues`](#err-invalidRateValues)
            * [`invalidFeesType`](#err-invalidFeesType)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedRequestBody
            - malformedCreateProductBody
            - invalidProductState
            - invalidAccountAvailability
            - invalidProductLinkToSubType
            - invalidTransactionTypes
            - invalidConstraintItemAmount
            - invalidConstraintMaxFundingAmount
            - invalidConstraintMaxTransferAmount
            - invalidConstraintMinBalance
            - invalidConstraintMinFundingAmount
            - invalidConstraintMinTransferAmount
            - invalidRateValues
            - invalidFeesType
        '409':
          $ref: '#/responses/409ProdConflict'
  '/products/{productId}/verificationLetterTemplate':
    get:
      produces:
        - text/markdown
      summary: Fetch an account verification letter template
      description: >-
        Return a representation of account verification letter template for this product. This is a Mustache template. The content is [Github Flavored
        Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) with Mustache template variables for replaceable text.


        The variables in the template are:
          * `{accountOwnerName}` - The account owner's full name
          * `{accountOwnerAddress}` - The account owner's address
          * `{businessName}` - The bussiness name
          * `{businessAddress}` - The business' address
          * `{today}` - Today's date
          * `{product}` - The account's product name
          * `{productType}` - The account's product type name
          * `{productApy}` - The product APY
          * `{routingNumber}` - The routing number
          * `{accountNumber}` - The account number
          * `{maturityDate}` - The maturity date
          * `{openingDate}` - The opening date
          * `{AccountBalance}` - The account balance


        This template is used to format the account verification letter in the `createVerificationLetter` operation in the Accounts API.
      operationId: getVerificationLetterTemplate
      security:
        - apiKey: []
          accessToken:
            - admin/read
      x-apiture-implemented: true
      tags:
        - Account Verification Letter Template
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - name: Accept
          in: header
          description: The media type of the desired response representation. Only `text/markdown` is currently supported.
          type: string
      responses:
        '200':
          description: Markdown template for the account verifications letter template.
          schema:
            type: string
          headers:
            Content-Type:
              description: The media type of the response representation. The `Content-Type` will be `text/markdown`.
              type: string
        '404':
          $ref: '#/responses/404Product'
        '406':
          description: >-
            Not Acceptable. Indicates that the server cannot produce a response matching the list of acceptable values defined in the request's
            headers (i.e. not text/markdown)
          schema:
            $ref: '#/definitions/errorResponse'
    put:
      consumes:
        - text/markdown
      produces:
        - text/markdown
      summary: Update this account verification letter template
      description: Set or replace the account verification letter template for this product.
      operationId: updateVerificationLetterTemplate
      security:
        - apiKey: []
          accessToken:
            - admin/write
      x-apiture-implemented: true
      tags:
        - Account Verification Letter Template
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - name: template
          in: body
          description: >-
            The [Github Flavored Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) text (with Mustache variables)
            defining the template for the verification letter.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: The media type of the desired response representation. Only `text/markdown` is currently supported.
          type: string
        - name: Content-Type
          in: header
          description: The media type of the request body representation. Only `text/markdown` is currently supported.
          type: string
      responses:
        '200':
          description: OK
          schema:
            type: string
          headers:
            Content-Type:
              description: The media type of the response representation. The `Content-Type` will be `text/markdown`.
              type: string
        '404':
          $ref: '#/responses/404Product'
  '/products/{productId}':
    get:
      summary: Fetch a representation of this product
      description: >-
        Return a [HAL](https://developer.apiture.com/docs/concepts/hal) representation of this product resource.


        This resource also maintains immutable revisions; see the `getProductRevisions` and `getProductRevision` operations. The `Content-Location`
        response header, if present, identifies the equivalent revision.
      operationId: getProduct
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - $ref: '#/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/product'
          headers:
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product resource.
              type: string
            Content-Location:
              description: The `Content-Location` will contain the URI of the specific revision corresponding to this product resource.
              type: string
        '304':
          $ref: '#/responses/304'
        '404':
          $ref: '#/responses/404Product'
        '412':
          $ref: '#/responses/412'
    put:
      summary: Update this product
      description: >-
        Perform a complete replacement of this product. This creates a new product revision. The new name, if any, must not be in use by another
        product  (whether active or inactive). Changes to the `state` follow the rules described in this API's description. <p> To change the state of
        a product,  use the `apiture:activate`, `apiture:deactivate`, or `apiture:remove` links on the resource to  `/activeProducts`,
        `/inactiveProducts`, `/removedProducts`. </p> <p> The product `code` may not be changed if the current `state` is not `pending`. </p>
      operationId: updateProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - name: product
          in: body
          required: true
          schema:
            $ref: '#/definitions/product'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/product'
          headers:
            Content-Location:
              description: The `Content-Location` will contain the URI of the specific revision corresponding to this product resource.
              type: string
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product resource.
              type: string
        '400':
          description: |-
            Bad Request. One of the request parameters to update a product  was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
            * [`invalidProductState`](#err-invalidProductState)
            * [`invalidTransactionTypes`](#err-invalidTransactionTypes)
            * [`invalidConstraintItemAmount`](#err-invalidConstraintItemAmount)
            * [`invalidConstraintMaxFundingAmount`](#err-invalidConstraintMaxFundingAmount)
            * [`invalidConstraintMaxTransferAmount`](#err-invalidConstraintMaxTransferAmount)
            * [`invalidConstraintMinBalance`](#err-invalidConstraintMinBalance)
            * [`invalidConstraintMinFundingAmount`](#err-invalidConstraintMinFundingAmount)
            * [`invalidConstraintMinTransferAmount`](#err-invalidConstraintMinTransferAmount)
            * [`invalidRateValues`](#err-invalidRateValues)
            * [`invalidFeesType`](#err-invalidFeesType)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedProduct
            - invalidProductState
            - invalidTransactionTypes
            - invalidConstraintItemAmount
            - invalidConstraintMaxFundingAmount
            - invalidConstraintMaxTransferAmount
            - invalidConstraintMinBalance
            - invalidConstraintMinFundingAmount
            - invalidConstraintMinTransferAmount
            - invalidRateValues
            - invalidFeesType
        '404':
          $ref: '#/responses/404Product'
        '412':
          $ref: '#/responses/412'
        '422':
          $ref: '#/responses/422'
    patch:
      summary: Update this product
      description: >-
        Perform a partial update of this product. This creates a new product revision. Fields which are omitted are not updated. The new name, if any,
        must not be in use by another product (whether active or inactive). Changes to the `state` follow the rules described in this API's
        description. <p> To change the state of a product,  use the `apiture:activate`, `apiture:deactivate`, or `apiture:remove` links on the
        resource to  `/activeProducts`, `/inactiveProducts`, `/removedProducts`. </p> <p> The product `code` may not be changed if the current `state`
        is not `pending`. </p>
      operationId: patchProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - name: product
          in: body
          required: true
          schema:
            $ref: '#/definitions/product'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/product'
          headers:
            Content-Location:
              description: The `Content-Location` will contain the URI of the specific revision corresponding to this product resource.
              type: string
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product resource.
              type: string
        '400':
          description: |-
            Bad Request. One of the request parameters to patch a product  was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
            * [`invalidProductState`](#err-invalidProductState)
            * [`invalidTransactionTypes`](#err-invalidTransactionTypes)
            * [`invalidConstraintItemAmount`](#err-invalidConstraintItemAmount)
            * [`invalidConstraintMaxFundingAmount`](#err-invalidConstraintMaxFundingAmount)
            * [`invalidConstraintMaxTransferAmount`](#err-invalidConstraintMaxTransferAmount)
            * [`invalidConstraintMinBalance`](#err-invalidConstraintMinBalance)
            * [`invalidConstraintMinFundingAmount`](#err-invalidConstraintMinFundingAmount)
            * [`invalidConstraintMinTransferAmount`](#err-invalidConstraintMinTransferAmount)
            * [`invalidRateValues`](#err-invalidRateValues)
            * [`invalidFeesType`](#err-invalidFeesType)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedProduct
            - invalidProductState
            - invalidTransactionTypes
            - invalidConstraintItemAmount
            - invalidConstraintMaxFundingAmount
            - invalidConstraintMaxTransferAmount
            - invalidConstraintMinBalance
            - invalidConstraintMinFundingAmount
            - invalidConstraintMinTransferAmount
            - invalidRateValues
            - invalidFeesType
        '404':
          $ref: '#/responses/404Product'
        '409':
          $ref: '#/responses/409ProdConflict'
        '412':
          $ref: '#/responses/412'
        '422':
          description: |-
            unprocessableEntity. The _id and newAccountAvailability cannot be changed

            This error response may have one of the following `type` values:
            * [`cannotPatchProductFields`](#err-cannotPatchProductFields)
          x-apiture-errors:
            - cannotPatchProductFields
          schema:
            $ref: '#/definitions/errorResponse'
    delete:
      summary: Delete this product resource
      description: |-
        Delete this product resource and any resources that are owned by it.
        A product may only be deleted if its `state` is `pending`.
      operationId: deleteProduct
      security:
        - apiKey: []
          accessToken:
            - data/delete
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/ifMatchHeaderParam'
        - $ref: '#/parameters/productIdPathParam'
      responses:
        '204':
          $ref: '#/responses/204Deleted'
        '400':
          description: |-
            Bad Request. One of the request parameters to delete a product  was not valid. See _error for more information

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
            * [`deleteProductInvalidState`](#err-deleteProductInvalidState)
          schema:
            $ref: '#/definitions/errorResponse'
          x-apiture-errors:
            - malformedProduct
            - deleteProductInvalidState
        '409':
          description: Conflict. A product may not be deleted if the `state` is anything other than `pending`.
          schema:
            $ref: '#/definitions/errorResponse'
        '412':
          $ref: '#/responses/412'
  '/products/{productId}/revisions':
    get:
      summary: Return a collection of product revisions
      description: >-
        Return a [paginated](https://developer.apiture.com/docs/concepts/pagination) [sortable](https://developer.apiture.com/docs/concepts/sorting)
        [filterable](https://developer.apiture.com/docs/concepts/filtering) [searchable](https://developer.apiture.com/docs/concepts/searchable)
        collection of product revisions. The [links](https://developer.apiture.com/docs/concepts/links) in the response include pagination links.
      operationId: getProductRevisions
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - name: start
          in: query
          description: The zero-based index of the first product revision item to include in this page. The default 0 denotes the beginning of the collection.
          type: integer
          format: int64
          default: 0
        - name: limit
          in: query
          description: The maximum number of product representations to return in this page.
          type: integer
          format: int32
          default: 100
        - name: sortBy
          in: query
          type: string
          description: >-
            Optional sort criteria. Revision collections are sorted by default in reverse chronological order (most recent revision first). See [sort
            criteria format](https://developer.apiture.com/docs/concepts/sorting), such as `?sortBy=field1,-field2`.
        - $ref: '#/parameters/filterQueryParam'
        - $ref: '#/parameters/qQueryParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/products'
        '400':
          $ref: '#/responses/400'
        '422':
          $ref: '#/responses/422'
  '/products/{productId}/revisions/{revisionId}':
    get:
      summary: Fetch a representation of an immutable revision of this product
      description: >-
        Return an immutable [HAL](https://developer.apiture.com/docs/concepts/hal) representation of this revision of this product resource. The
        revision may also have `prev` and `next` links to previous and/or next revisions, if they exist.
      operationId: getProductRevision
      security:
        - apiKey: []
      x-apiture-implemented: true
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productIdPathParam'
        - $ref: '#/parameters/revisionIdParam'
        - $ref: '#/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/product'
          headers:
            ETag:
              description: >-
                The `ETag` response header specifies an entity tag which must be provided in an `If-Match` request header for *`PUT`* or *`PATCH`*
                operations which update this product resource.
              type: string
        '304':
          $ref: '#/responses/304'
        '404':
          $ref: '#/responses/404Product'
        '412':
          $ref: '#/responses/412'
  /activeProductTypes:
    post:
      summary: Activate a product type
      description: >-
        Activate a product type that is eligible to be activated. <p> Only product types which are `pending` or `inactive` may be activated. This
        `POST` operation is invoked from the `apiture:activate` link on a product type. <p> This changes the `state` to `active`.
      operationId: activateProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/productTypeQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `productType` was malformed or does not refer to a product type.

            This error response may have one of the following `type` values:
            * [`malformedProductType`](#err-malformedProductType)
          x-apiture-errors:
            - malformedProductType
        '409':
          $ref: '#/responses/409ProdTypeConflict'
        '422':
          $ref: '#/responses/422'
  /inactiveProductTypes:
    post:
      summary: Deactivate a product type
      description: >-
        Deactivate a product type that is eligible to be deactivated. <p> Only product types which are `pending` or `active` and which are not in use
        by any `pending` or `active` products or accounts, and which are not the parent type of `pending` or `active`  product types may be
        deactivated. <p> This `POST` operation is invoked from the `apiture:deactivate` link on a product type when it is eligible to be deactivated.
        <p> This changes the `state` to `inactive`.
      operationId: deactivateProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product Type
      parameters:
        - $ref: '#/parameters/productTypeQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `productType` was malformed or does not refer to a product type.

            This error response may have one of the following `type` values:
            * [`malformedProductType`](#err-malformedProductType)
          x-apiture-errors:
            - malformedProductType
        '409':
          $ref: '#/responses/409ProdTypeConflict'
        '422':
          $ref: '#/responses/422'
  /removedProductTypes:
    post:
      summary: Remove a product type
      tags:
        - Product Type
      description: >-
        Remove a product type that is eligible to be removed.  <p> Only product types which are `active` or `inactive` and which are not in use by any
        `pending`, `active` or `inactive` products or accounts, and which are not the parent type of pending, active, or inactive product types may be
        removed. This operation is invoked from the `apiture:remove` link on a product type when it is eligible to be removed. <p> This changes the
        `state` to `removed`. <p> Removing a product type will append the timestamp with the format "` (Removed yyyy-mm-ddTHH:MM:SSZ)`" to the name,
        so that the previous name may be used for other product types.
      operationId: removeProductType
      security:
        - apiKey: []
          accessToken:
            - data/write
      parameters:
        - $ref: '#/parameters/productTypeQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `productType` was malformed or does not refer to a product type.

            This error response may have one of the following `type` values:
            * [`malformedProductType`](#err-malformedProductType)
          x-apiture-errors:
            - malformedProductType
        '409':
          $ref: '#/responses/409ProdTypeConflict'
        '422':
          $ref: '#/responses/422'
  /unlockedProducts:
    post:
      summary: Marks an active product as eligible for new account opening
      description: >-
        Marks an active product as eligible for new account opening. <p> This `POST` operation is invoked from the `apiture:unlock` link on a product.
        <p> This changes the `newAccountAvailability` to `available`.
      operationId: unlockProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `product` was malformed or does not refer to a product.

            This error response may have one of the following `type` values:
            * [`canOnlyLockUnlockActive`](#err-canOnlyLockUnlockActive)
            * [`malformedProduct`](#err-malformedProduct)
          x-apiture-errors:
            - canOnlyLockUnlockActive
            - malformedProduct
        '409':
          $ref: '#/responses/409ProdConflict'
        '422':
          $ref: '#/responses/422'
  /lockedProducts:
    post:
      summary: Marks an active product as ineligible for new account opening
      description: >-
        Marks an active product as ineligible for new account opening. Users may not open new accounts with this product, thus the product is
        "locked". <p> This `POST` operation is invoked from the `apiture:lock` link on a product. <p> This changes the `newAccountAvailability` to
        `notAvailable`.
      operationId: lockProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `product` was malformed or does not refer to a product.

            This error response may have one of the following `type` values:
            * [`canOnlyLockUnlockActive`](#err-canOnlyLockUnlockActive)
            * [`malformedProduct`](#err-malformedProduct)
          x-apiture-errors:
            - canOnlyLockUnlockActive
            - malformedProduct
        '409':
          $ref: '#/responses/409ProdConflict'
        '422':
          $ref: '#/responses/422'
  /activeProducts:
    post:
      summary: Activate a product
      description: >-
        Activate a product that is eligible to be activated. Only product types which are `pending` or `inactive` may be activated. <p> This `POST`
        operation is invoked from the `apiture:activate` link on a product. <p> This changes the `state` to `active`.
      operationId: activateProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `product` was malformed or does not refer to a product.

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
          x-apiture-errors:
            - malformedProduct
        '409':
          $ref: '#/responses/409ProdConflict'
        '422':
          $ref: '#/responses/422'
  /inactiveProducts:
    post:
      summary: Deactivate a product
      description: >-
        Deactivate a product that is eligible to be deactivated. <p> Only products which are `pending` or `active` and which are not in use by any
        `pending`, `active` or `inactive` accounts types may be deactivated. <p> This `POST` operation is invoked from the `apiture:deactivate` link
        on a product when it is eligible to be deactivated. <p> This changes the `state` to `inactive`.
      operationId: deactivateProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      tags:
        - Product
      parameters:
        - $ref: '#/parameters/productQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `product` was malformed or does not refer to a product.

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
          x-apiture-errors:
            - malformedProduct
        '409':
          $ref: '#/responses/409ProdConflict'
        '422':
          $ref: '#/responses/422'
  /removedProducts:
    post:
      summary: Remove a product
      tags:
        - Product
      description: >-
        Remove a product that is eligible to be removed. <p> Only products which are `active` or `inactive` _and_ which are not used by any non-closed
        accounts may be removed. <p> This `POST` operation is invoked from the `apiture:remove` link on a product when it is eligible to be removed.
        <p> This changes the `state` to `removed`. <p> Removing a product will append the timestamp with the format "` (Removed
        yyyy-mm-ddTHH:MM:SSZ)`" to the name, so that the previous name may be used for other products.
      operationId: removeProduct
      security:
        - apiKey: []
          accessToken:
            - data/write
      parameters:
        - $ref: '#/parameters/productQueryParam'
        - $ref: '#/parameters/ifMatchHeaderParam'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/productType'
        '400':
          description: |-
            Bad Request. The `product` was malformed or does not refer to a product.

            This error response may have one of the following `type` values:
            * [`malformedProduct`](#err-malformedProduct)
          x-apiture-errors:
            - malformedProduct
        '409':
          $ref: '#/responses/409ProdConflict'
        '422':
          $ref: '#/responses/422'
  /:
    get:
      summary: Top-level resources and operations in this API
      description: |-
        Return links to the top-level resources and operations in this API. This API returns the following links:
          * *`apiture:product`* : links to the collection of products
          * *`apiture:productTypes`* : links to the collection of product types
      operationId: getApi
      security:
        - apiKey: []
      x-apiture-implemented: true
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/root'
          examples:
            application/hal+json:
              id: products
              name: Banking Products
              apiVersion: 0.1.0
              _profile: 'https://api.apiture.com/schemas/common/root/v2.0.0/profile.json'
              _links:
                'apiture:products':
                  href: /products/products
                'apiture:productTypes':
                  href: /products/productTypes
      tags:
        - API
      parameters: []
  /apiDoc:
    get:
      summary: Return API definition document
      description: Return the OpenAPI document that describes this API.
      operationId: getApiDoc
      security:
        - apiKey: []
      x-apiture-implemented: true
      produces:
        - application/json
        - application/openapi+json;version=2.0
        - application/openapi+yaml;version=2.0
      responses:
        '200':
          description: OK
          schema:
            type: object
      tags:
        - API
      parameters: []
  /labels:
    get:
      summary: Localized Labels
      description: |-
        Return a JSON object which defines labels
        for enumeration types defined by the schemas
        defined in this API.


        The labels in the response may not all match the
        requested language; some may be in the default
        language (`en-us`).
      operationId: getLabels
      security:
        - apiKey: []
      x-apiture-implemented: true
      parameters:
        - name: Accept-Language
          in: header
          type: string
          description: >-
            The weighted language tags which indicate the user's preferred natural language for the localized labels in the response, as per [RFC
            7231](https://tools.ietf.org/html/rfc7231#section-5.3.5).
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/labelGroups'
      tags:
        - API
parameters:
  productTypeIdPathParam:
    name: productTypeId
    description: The unique identifier of this product type. This is an opaque string.
    in: path
    type: string
    required: true
  nameQueryParam:
    name: name
    in: query
    description: >-
      Subset the products or product types collection to those with this `name` value. This is combined with an implicit `and` with other filters if
      they are used. See [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  typeQueryParam:
    name: type
    in: query
    description: >-
      Subset the products or product types collection to those with this exact `type` value. This is combined with an implicit `and` with other
      filters if they are used. See [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  stateQueryParam:
    name: state
    in: query
    description: >-
      Subset the products or product types collection to those whose `state` matches this value. Use `|` to separate multiple values. For example,
      `?state=pending` matches only items whose `state` is `pending`; `?state=removed|inactive` matches items whose `state` is `removed` or
      `inactive`. This is combined with an implicit `and` with other filters if they are used. See
      [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  codeQueryParam:
    name: code
    in: query
    description: >-
      Subset the products or product types collection to those whose `code` matches this value. Use `|` to separate multiple values. For example,
      `?type=B2001` matches only items whose `type` is `B2001`, but `?type=B2001|B3002` matches items whose `type` is `B2001` or `B3002`. This is
      combined with an implicit `and` with `?state` `?filter` if they are used. See
      [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  categoryQueryParam:
    name: category
    in: query
    description: >-
      Subset the products or product types collection to those whose `category` matches this value. Use `|` to separate multiple values. For example,
      `?category=Savings` matches only items whose `category` is `Savings`, but `?category=Savings|Checking` matches items whose `type` is `Savings`
      or `Checking`. This is combined with an implicit `and` with other filters if they are used. See
      [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  targetQueryParam:
    name: target
    in: query
    description: >-
      Subset the products or product types collection to those whose `target` matches this value (`personal` or `business`). For example,
      `?target=personal` matches only items whose `target` is `personal`. This is combined with an implicit `and` with other filters if they are used.
      See [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
    enum:
      - personal
      - business
  subtypeQueryParam:
    name: subtype
    in: query
    description: >-
      Subset the product types collection to those with this exact `subtype` value. For example, `?subtype=true` will limit the response to only
      product types which are subtypes. This is combined with an implicit `and` with other filters if they are used. See
      [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: boolean
  ifxTypeQueryParam:
    name: ifxType
    in: query
    description: >-
      Subset the products collection to those whose `ifxType` matches this value. Use `|` to separate multiple values. For example, `?ifxType=SDA`
      matches only items whose `ifxType` is `SDA`; `?ifxType=SDA|DDA` matches items whose `ifxType` is `SDA` or `DDA`. This is combined with an
      implicit `and` with other filters if they are used. See [filtering](https://developer.apiture.com/docs/concepts/filtering).
    type: string
  filterQueryParam:
    name: filter
    in: query
    description: 'Optional filter criteria. See [filtering](https://developer.apiture.com/docs/concepts/filtering).'
    type: string
  qQueryParam:
    name: q
    in: query
    description: 'Optional search string. See [searching](https://developer.apiture.com/docs/concepts/searching).'
    type: string
  productIdPathParam:
    name: productId
    description: The unique identifier of this product. This is an opaque string.
    in: path
    type: string
    required: true
  productQueryParam:
    name: product
    description: A server-supplied value which identifies the product instance.
    type: string
    in: query
    required: true
  productTypeQueryParam:
    name: productType
    description: A server-supplied value which identifies the product type instance.
    type: string
    in: query
    required: true
  revisionIdParam:
    name: revisionId
    description: >-
      The identifier for a revision of this resource. Revision identifiers are strings in [RFC 3339](https://tools.ietf.org/html/rfc3339) format:
      `YYYY-MM-DDThh:mm:ss.sssZ`.
    in: path
    type: string
    required: true
  ifMatchHeaderParam:
    name: If-Match
    description: The entity tag that was returned in the `ETag` response. This must match the current entity tag of the resource.
    in: header
    type: string
  ifNoneMatchHeaderParam:
    name: If-None-Match
    description: >-
      The entity tag that was returned in the `ETag` response. If the resource's current entity tag matches, the `GET` will return 304 (Not Modified)
      and no response body, else the resource representation will be returned.
    in: header
    type: string
securityDefinitions:
  apiKey:
    type: apiKey
    name: API-Key
    in: header
    description: >-
      API Key based authentication. Each client application must pass its private, unique API key, allocated in the developer portal, via the
      `API-Key: {api-key}` request header.
  accessToken:
    type: oauth2
    flow: accessCode
    description: >-
      OAuth2 client access token authentication. The client authenticates against the server at `authorizationUrl`, passing the client's private
      `clientId` (and optional `clientSecret`) as part of this flow. The client obtains an access token from the server at `tokenUrl`. It then passes
      the received access token via the `Authorization: Bearer {access-token}` header in subsequent API calls. The authorization process also returns
      a refresh token which the client should use to renew the access token before it expires.
    authorizationUrl: /auth/oauth2/authorize
    tokenUrl: /auth/oauth2/token
    scopes:
      data/read: 'Read access to non-account, non-profile data.'
      data/write: 'Write (update) access to non-account, non-profile data.'
      data/delete: 'Delete access to non-account, non-profile data.'
      data/full: 'Full access to non-account, non-profile data.'
      admin/read: 'Read admin access to non-account, non-profile data.'
      admin/write: 'Write admin access to non-account, non-profile data.'
      admin/delete: 'Delete admin access to non-account, non-profile data.'
responses:
  '304':
    description: Not Modified. The resource has not been modified since it was last fetched.
  '400':
    description: >-
      Bad Request.  The request body or one or more of the query parameters was not well formed.  The `_error` field in the response will contain
      details about the request error.
    schema:
      $ref: '#/definitions/errorResponse'
  '412':
    description: >-
      Precondition Failed. The supplied `if-Match` header value does not match the most recent `ETag` response header value. The resource has changed
      in the interim.
    schema:
      $ref: '#/definitions/errorResponse'
  '422':
    description: >-
      Unprocessable Entity. One or more of the query parameters was well formed but otherwise invalid. The `_error` field in the response will contain
      details about the request error.
    schema:
      $ref: '#/definitions/errorResponse'
  404ProductType:
    description: >-
      Not Found. There is no such product type resource at the specified `{productTypeId}` The `_error` field in the response will contain details
      about the request error.


      This error response may have one of the following `type` values:

      * [`invalidProductTypeId`](#err-invalidProductTypeId)
    schema:
      $ref: '#/definitions/errorResponse'
    x-apiture-errors:
      - invalidProductTypeId
  404Product:
    description: >-
      Not Found. There is no such product resource at the specified `{productId}` The `_error` field in the response will contain details about the
      request error.


      This error response may have one of the following `type` values:

      * [`invalidProductId`](#err-invalidProductId)
    schema:
      $ref: '#/definitions/errorResponse'
    x-apiture-errors:
      - invalidProductId
  204Deleted:
    description: No Content. The resource was deleted successfully.
  409ProdConflict:
    description: |-
      Conflict. There is a conflict between the request and the current state of the resource. It may be one of the following:
        * The `state` of an `active` or `inactive` resource may not be changed to `pending`.
        * The `state` of a `removed` resource may not be changed.
        * The `state` of the resource may not be changed to `active` or
        `inactive` when the product type or subtype is still `pending'.
        * The resource cannot be created or modified due to a conflict with other resources. For example, the name may already be in use,
        or the selected subtype is not a subtype of the selected product type.
        * An attempt to set a product's `newAccountAvailability` to true when the product state is `inactive`.
        * An attempt to set a product's `code` when the product state is not `pending`.
        * An attempt to set a product's `code` to a value that is used in another product.

      This error response may have one of the following `type` values:
      * [`cannotChangeRateType`](#err-cannotChangeRateType)
      * [`invalidProductState`](#err-invalidProductState)
      * [`productStateCannotBeAltered`](#err-productStateCannotBeAltered)
      * [`productNameInUse`](#err-productNameInUse)
      * [`productCodeInUse`](#err-productCodeInUse)
      * [`activateProductInvalidState`](#err-activateProductInvalidState)
      * [`deactivateProductInvalidState`](#err-deactivateProductInvalidState)
      * [`removeProductInvalidState`](#err-removeProductInvalidState)
      * [`activateProductSubTypeInvalidState`](#err-activateProductSubTypeInvalidState)
      * [`cannotChangeRemovedProductTypeState`](#err-cannotChangeRemovedProductTypeState)
    schema:
      $ref: '#/definitions/errorResponse'
    x-apiture-errors:
      - cannotChangeRateType
      - invalidProductState
      - productStateCannotBeAltered
      - productNameInUse
      - productCodeInUse
      - activateProductInvalidState
      - deactivateProductInvalidState
      - removeProductInvalidState
      - activateProductSubTypeInvalidState
      - cannotChangeRemovedProductTypeState
  409ProdTypeConflict:
    description: |-
      Conflict. There is a conflict between the request and the current state of the resource. It may be one of the following:
        * The `state` of the resource may not be changed to `pending`.
        * The resource cannot be created or modified due to a conflict with other resources. For example, the name may already be in use.
        * Attempt to create a subtype of a subtype.

      This error response may have one of the following `type` values:
      * [`productTypeDoesNotExist`](#err-productTypeDoesNotExist)
      * [`deleteProductTypeInvalidState`](#err-deleteProductTypeInvalidState)
      * [`removeProductTypeInvalidState`](#err-removeProductTypeInvalidState)
      * [`updateProductTypeInvalidState`](#err-updateProductTypeInvalidState)
      * [`cannotUpdateProductTypeState`](#err-cannotUpdateProductTypeState)
    schema:
      $ref: '#/definitions/errorResponse'
    x-apiture-errors:
      - productTypeDoesNotExist
      - deleteProductTypeInvalidState
      - removeProductTypeInvalidState
      - updateProductTypeInvalidState
      - cannotUpdateProductTypeState
definitions:
  productTypeFields:
    title: Product Type Fields (v1.0.0)
    description: Common fields of the product type resource.
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/productState'
      - properties:
          - name
          - label
          - description
          - subtype
    properties:
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product type.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product type. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product type. This field may be localized.  The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      subtype:
        description: >-
          Indicates if this is a subtype. This is a derived, immutable property, based on whether the product type was created with a link to a parent
          type. See also the *`apiture:parent`* link on the `productSubtype` schema.
        type: boolean
    type: object
    x-apiture-flattened: true
  ifxType:
    title: IFX Account Type (v1.0.0)
    description: >
      A code which identifies the product type. This is one of the [IFX AcctType](https://ifxforum.org) values. Labels and descriptions for the
      enumeration values are in the `ifxType` key in the response of the `getLabels` operation.


      <strong><code>ifxType</code></strong> strings may have one of the following

      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values

      (described by the named ifxType)


      <table>

      <tr>
        <th>Value</th><th>Description</th>
      </tr>


      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)

      named `ifxType` in the response from the [`getLabels`](#op-getLabels) operation.


      <tr>
          <td><strong><code>CCA</code></strong></td><td>Credit card account</td>
          </tr>
      <tr>
          <td><strong><code>CDA</code></strong></td><td>Certificate of deposit account (CD)</td>
          </tr>
      <tr>
          <td><strong><code>CLA</code></strong></td><td>Commercial loan account</td>
          </tr>
      <tr>
          <td><strong><code>CMA</code></strong></td><td>Cash management account</td>
          </tr>
      <tr>
          <td><strong><code>DDA</code></strong></td><td>Demand deposit account</td>
          </tr>
      <tr>
          <td><strong><code>EQU</code></strong></td><td>Home equity loan</td>
          </tr>
      <tr>
          <td><strong><code>GLA</code></strong></td><td>General ledger account</td>
          </tr>
      <tr>
          <td><strong><code>ILA</code></strong></td><td>Installment loan account</td>
          </tr>
      <tr>
          <td><strong><code>INV</code></strong></td><td>Investment account</td>
          </tr>
      <tr>
          <td><strong><code>IRA</code></strong></td><td>Individual retirement account</td>
          </tr>
      <tr>
          <td><strong><code>IRL</code></strong></td><td>Accounts held in Ireland</td>
          </tr>
      <tr>
          <td><strong><code>LOC</code></strong></td><td>Consumer line of credit</td>
          </tr>
      <tr>
          <td><strong><code>MLA</code></strong></td><td>Military Lending Account: Credit facility held by former US service member</td>
          </tr>
      <tr>
          <td><strong><code>MMA</code></strong></td><td>Money market account</td>
          </tr>
      <tr>
          <td><strong><code>PBA</code></strong></td><td>Packaged bank Account: Account with additional benefits that charges a fixed monthly fee.</td>
          </tr>
      <tr>
          <td><strong><code>PPA</code></strong></td><td>Private pension administrator</td>
          </tr>
      <tr>
          <td><strong><code>RWD</code></strong></td><td>Reward accounts</td>
          </tr>
      <tr>
          <td><strong><code>SDA</code></strong></td><td>Savings deposit account</td>
          </tr>
      </table>
    x-apiture-enum: ifxType
    type: string
    enum:
      - CCA
      - CDA
      - CLA
      - CMA
      - DDA
      - EQU
      - GLA
      - ILA
      - INV
      - IRA
      - IRL
      - LOC
      - MLA
      - MMA
      - PBA
      - PPA
      - RWD
      - SDA
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  summaryProductType:
    title: Product Type Summary (v1.0.0)
    description: >-
      Summary representation of a product type resource in product types collections. This representation normally does not contain any `_embedded`
      objects. If needed, call the `GET` operation on the item's `self` link to get `_embedded` objects. This representation omits the `attributes` of
      the full representation.
    example:
      _id: eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
      _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
      _links:
        self:
          href: /products/productTypes/eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
        'apiture:parent':
          href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
      name: Demand Deposit with Interest
      label: Demand Deposit with Interest
      description: A demand deposit checking account with interest.
      state: active
      subtype: true
      subtypeCount: 0
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/productTypeFields'
      - $ref: '#/definitions/abstractResource'
      - properties:
          - _id
    properties:
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product type.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product type. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product type. This field may be localized.  The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      subtype:
        description: >-
          Indicates if this is a subtype. This is a derived, immutable property, based on whether the product type was created with a link to a parent
          type. See also the *`apiture:parent`* link on the `productSubtype` schema.
        type: boolean
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      _id:
        description: The unique identifier for this product type resource. This is an opaque string.
        readOnly: true
        type: string
    type: object
    x-apiture-flattened: true
  createProductType:
    title: Create Product Type (v1.0.0)
    description: >-
      Representation used to create a new product type. To create a `subtype`, the request may include a link in the `_links` object which refers to
      the parent product type.
    required:
      - name
      - label
      - description
    example:
      _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
      name: Demand Deposit with Interest
      label: Demand Deposit with Interest
      description: 'A demand deposit checking account, a subtype of the base Demand Deposit account.'
      _links:
        'apiture:parent':
          href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - $ref: '#/definitions/productTypeFields'
      - properties:
          - attributes
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product type.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product type. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product type. This field may be localized.  The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      subtype:
        description: >-
          Indicates if this is a subtype. This is a derived, immutable property, based on whether the product type was created with a link to a parent
          type. See also the *`apiture:parent`* link on the `productSubtype` schema.
        type: boolean
      attributes:
        type: object
        description: An optional map of name/value pairs which provide additional metadata about the product type.
    type: object
    x-apiture-flattened: true
  productType:
    title: Product Type (v1.0.0)
    description: >
      Representation of a product type resource. If the type is a subtype, the `_embedded` resource contains the parent type.



      <h3 class='schema-links' id="productType-links" >Links</h3>


      Response and request bodies using this <strong><code>productType</code></strong> schema may contain

      the following <a href='https://developer.apiture.com/docs/concepts/links'>links</a>:


      <table>

      <tr>
        <th>Rel</th><th>Summary</th><th>Method</th>
      </tr>


      <tr>

      <td><a href='#op-getProductType'><strong><code>self</code></strong></a></td><td>Fetch a representation of this product
      type.</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProductType'><strong><code>apiture:parent</code></strong></a></td><td>Fetch a representation of this product
      type.</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProductTypes'><strong><code>apiture:children</code></strong></a></td><td>Return a collection of product
      types</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProducts'><strong><code>apiture:products</code></strong></a></td><td>Return a collection of
      products</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-activateProductType'><strong><code>apiture:activate</code></strong></a></td><td>Activate a product
      type</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-deactivateProductType'><strong><code>apiture:deactivate</code></strong></a></td><td>Deactivate a product
      type</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-removeProductType'><strong><code>apiture:remove</code></strong></a></td><td>Remove a product
      type</td><td><code>POST</code></td>

      </tr>

      </table>
    x-apiture-links:
      - rel: self
        operationId: getProductType
      - rel: 'apiture:parent'
        operationId: getProductType
      - rel: 'apiture:children'
        operationId: getProductTypes
      - rel: 'apiture:products'
        operationId: getProducts
      - rel: 'apiture:activate'
        operationId: activateProductType
      - rel: 'apiture:deactivate'
        operationId: deactivateProductType
      - rel: 'apiture:remove'
        operationId: removeProductType
    example:
      _id: eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
      _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
      _links:
        self:
          href: /products/productTypes/eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
        'apiture:parent':
          href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
        'apiture:deactivate':
          title: Deactivate this product type
          href: /products/inactiveProductTypes?productType=eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
      _embedded:
        parent:
          _id: 4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
          _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
          name: Demand Deposit
          label: Demand Deposit
          description: A demand deposit checking account.
          state: active
          subtype: false
          subtypeCount: 1
          _links:
            self:
              href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
            'apiture:deactivate':
              href: /disabledProductTypes?productType=4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
      name: Demand Deposit with Interest
      label: Demand Deposit with Interest
      description: A demand deposit checking account with interest.
      state: active
      subtype: true
      subtypeCount: 0
    properties:
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product type.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product type. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product type. This field may be localized.  The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      subtype:
        description: >-
          Indicates if this is a subtype. This is a derived, immutable property, based on whether the product type was created with a link to a parent
          type. See also the *`apiture:parent`* link on the `productSubtype` schema.
        type: boolean
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: >-
          Embedded resources for this product type. This may contain the parent type, if any. _embedded may not appear if there are no embedded
          resources.
        properties:
          parent:
            description: 'In subtypes, this is the parent type.'
            allOf:
              - $ref: '#/definitions/productType'
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      _id:
        description: The unique identifier for this product type resource. This is an opaque string.
        readOnly: true
        type: string
      subtypeCount:
        description: >-
          `0` if this type does not have subtypes; otherwise this holds the indicated number of direct subtypes.  This is a derived, immutable
          property. See also the *`apiture:children`* link on the `productSubtype` schema.
        type: integer
        minimum: 0
        readOnly: true
      createdAt:
        description: The date-time when this product type was created. This value is derived and immutable.
        type: string
        format: date-time
        readOnly: true
      attributes:
        type: object
        description: An optional map of name/value pairs which provide additional metadata about the product type.
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/summaryProductType'
      - properties:
          - subtypeCount
          - createdAt
          - _embedded
          - attributes
    type: object
    x-apiture-flattened: true
  productTypes:
    title: Product Type Collection (v1.0.0)
    description: >-
      Collection of product types. The items in the collection are ordered in the `_embedded` object with name `items`. The top-level `_links` object
      may contain pagination links (`self`, `next`, `prev`, `first`, `last`, `collection`).
    example:
      _profile: 'https://api.apiture.com/schemas/products/productsTypes/v1.0.0/profile.json'
      start: 0
      limit: 10
      count: 127
      name: productTypes
      _links:
        self:
          href: /products?start=0&limit=10
        first:
          href: /products?start=0&limit=10
        next:
          href: /products?start=10&limit=10
        collection:
          href: /products
      _embedded:
        items:
          - _id: 4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
            _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
            name: Demand Deposit
            label: Demand Deposit
            description: A demand deposit checking account.
            state: active
            subtype: false
            subtypeCount: 1
            _links:
              self:
                href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
          - _id: eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
            _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
            name: Demand Deposit with Interest
            label: Demand Deposit with Interest
            description: A demand deposit checking account with interest.
            state: active
            subtype: true
            subtypeCount: 0
            _links:
              self:
                href: /products/productTypes/eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
              'apiture:parent':
                href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/collection'
      - properties:
          - _embedded
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        type: object
        description: Embedded objects.
        properties:
          items:
            description: An array containing a page of product type items.
            type: array
            items:
              $ref: '#/definitions/summaryProductType'
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      count:
        description: >-
          The number of items in the collection. This value is _optional_ and may be omitted if the count is not computable efficiently. If a filter
          is applied to the collection (either implicitly or explicitly), the count, if present, indicates the number of items that satisfy the
          filter.
        type: integer
      start:
        description: The start index of this page of items.
        type: integer
      limit:
        description: The maximum number of items per page.
        type: integer
      name:
        description: The name of the collection.
        type: string
    type: object
    x-apiture-flattened: true
  fee:
    title: Fee (v1.0.0)
    description: Fees that are attached to accounts of this product.
    type: object
    properties:
      type:
        description: The fee type.
        allOf:
          - $ref: '#/definitions/productFeeType'
      period:
        description: >-
          The period at which the fee is assessed. If omitted, the fee is assessed per transaction. <p> This value is an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of the form `P[n]Y[n]M[n]D` to specify the fee period in the number of
          years/months/weeks/days. For example, the values `P1d`, `P1W`, `P2W`, `P1M`, `P0.25Y`, `P0.5Y`, `P1Y` indicate a term of daily, weekly,
          by-weekly, monthly, quarterly, biannually, and annually, respectively, (although other periods may be allowed).
        type: string
        example: P1M
      description:
        description: A description of the fee and its structure and period.
        type: string
      structure:
        description: The fee structure for this fee
        allOf:
          - $ref: '#/definitions/feeStructure'
      amount:
        description: 'The amount of the (fixed) fee, in the product''s `currency`.'
        type: string
        example: '1.00'
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  feeStructure:
    title: Product Fee Structure (v1.0.0)
    description: >
      The fee structure. fixed fee, variable fee, or other. For example, the `service` fee or `atm` may be `fixed` (such as `"amount" : "2.00"`) but
      the `foreignTransactions` fee may be `variable`.


      <strong><code>feeStructure</code></strong> strings may have one of the following

      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values

      (described by the named feeStructure)


      <table>

      <tr>
        <th>Value</th><th>Description</th>
      </tr>


      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)

      named `feeStructure` in the response from the [`getLabels`](#op-getLabels) operation.


      <tr>
          <td><strong><code>unknown</code></strong></td><td>Undetermined fee structure</td>
          </tr>
      <tr>
          <td><strong><code>variable</code></strong></td><td>A variable rate fee</td>
          </tr>
      <tr>
          <td><strong><code>fixed</code></strong></td><td>A fixed rate fee</td>
          </tr>
      </table>
    type: string
    enum:
      - unknown
      - variable
      - fixed
    x-apiture-enum: feeStructure
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  productFeeType:
    title: Product Fee Type (v1.0.0)
    description: |-
      A type identifier which indicates what type of fee exists for a banking product.


      **Warning**: the `enum` list will be removed in a future release.
      and the values defined at runtime via the `productFeeType`
      group in the response from the [`getLabels`](#op-getLabels) operation.
    type: string
    x-apiture-choice: productFee
    enum:
      - servicing
      - minimumBalance
      - overdraft
      - returnedCheck
      - statementHardCopy
      - atm
      - foreignTransaction
      - earlyClosing
      - earlyWithdrawal
      - other
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  transactionTypes:
    title: Transaction Types (v1.0.0)
    description: An array which lists which transaction types are allowed for an account.
    type: array
    items:
      $ref: '#/definitions/transactionType'
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  transactionType:
    title: Transaction Type (v1.0.0)
    description: |
      A string which defines a transaction type allowed for an account.
        * *`credit`* : Credits may be posted to this account, such as transfer funds _to_ this external account.
        * *`debit`* : Debits may be posted to this account, such as transfer funds _from_ this external account.
      Labels and descriptions for the enumeration values are in the `transactionType`
      key in the response of the `getLabels` operation.

      <strong><code>transactionType</code></strong> strings may have one of the following
      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values
      (described by the named transactionType)

      <table>
      <tr>
        <th>Value</th><th>Description</th>
      </tr>

      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)
      named `transactionType` in the response from the [`getLabels`](#op-getLabels) operation.

      <tr>
          <td><strong><code>debit</code></strong></td><td>A transaction which descreases an account's balance</td>
          </tr>
      <tr>
          <td><strong><code>credit</code></strong></td><td>A transaction which increases an accounts's balance</td>
          </tr>
      </table>
    type: string
    enum:
      - debit
      - credit
    x-apiture-enum: transactionType
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  productFields:
    title: Product Fields (v1.0.0)
    description: Common fields of the product resource.
    x-apiture-fragment: true
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/productState'
      - properties:
          - name
          - label
          - description
          - code
          - newAccountAvailability
          - category
          - rate
          - revision
          - ifxType
          - target
    properties:
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product. This field may be localized. The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      code:
        description: >-
          The unique product code for this product, normally defined by the underlying banking core. The `code` cannot be changed once the `state` is
          beyond `pending`.
        type: string
        maxLength: 64
      newAccountAvailability:
        description: >-
          Indicates if the product is available for opening new accounts.
            * *`available`* means the product may be selected for a new account application.
            * *`notAvailable`* means the product may *not* be selected for a new account application.
          The default is `available`. Note that clients must check both the product `state` and the `newAccountAvailability` when listing products for
          new account opening. The `?openable=true` query parameter on `/accounts` combines these. Labels and descriptions for the enumeration values
          are in the `newAccountAvailability` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/newAccountAvailability'
      category:
        description: The product category name. This is a more readable form of the product's `type`.
        type: string
        example: Savings
      rate:
        description: The interest rate for this product.
        allOf:
          - $ref: '#/definitions/rate'
      revision:
        description: The revision string for this product. This property derived and immutable.
        type: string
      ifxType:
        description: The product IFX Account Type.
        allOf:
          - $ref: '#/definitions/ifxType'
      target:
        description: >-
          Describes the target audience or consumer of the accounts, `personal` or `business`. Labels and descriptions for the enumeration values are
          in the `productTarget` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/productTarget'
    type: object
    x-apiture-flattened: true
  newAccountAvailability:
    title: New Account Availability (v1.0.0)
    description: |
      Describes if the product is available for opening new accounts.

      <strong><code>newAccountAvailability</code></strong> strings may have one of the following
      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values
      (described by the named newAccountAvailability)

      <table>
      <tr>
        <th>Value</th><th>Description</th>
      </tr>

      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)
      named `newAccountAvailability` in the response from the [`getLabels`](#op-getLabels) operation.

      <tr>
          <td><strong><code>available</code></strong></td><td>Users may open new accounts of this type</td>
          </tr>
      <tr>
          <td><strong><code>notAvailable</code></strong></td><td>Users may not open new accounts of this type</td>
          </tr>
      </table>
    type: string
    enum:
      - available
      - notAvailable
    x-apiture-enum: newAccountAvailability
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  productTarget:
    title: Product Target (v1.0.0)
    description: |
      The target audience for this product.

      <strong><code>productTarget</code></strong> strings may have one of the following
      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values
      (described by the named productTarget)

      <table>
      <tr>
        <th>Value</th><th>Description</th>
      </tr>

      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)
      named `productTarget` in the response from the [`getLabels`](#op-getLabels) operation.

      <tr>
          <td><strong><code>personal</code></strong></td><td>Banking products for personal use</td>
          </tr>
      <tr>
          <td><strong><code>business</code></strong></td><td>Banking products for business use</td>
          </tr>
      </table>
    type: string
    enum:
      - personal
      - business
    x-apiture-enum: productTarget
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  summaryProduct:
    title: Product Summary (v1.0.0)
    description: >-
      Summary representation of a product resource in products collections. This representation normally does not contain any `_embedded` objects. If
      needed, call the `GET` operation on the item's `self` link to get `_embedded` objects. This representation omits the `attributes` of the full
      representation.
    example:
      _id: a6459cdf-543e-46df-887b-ac5378ee9acd
      _profile: 'https://api.apiture.com/schemas/products/product/v1.0.0/profile.json'
      _links:
        self:
          href: /products/products/a6459cdf-543e-46df-887b-ac5378ee9acd
        'apiture:productType':
          href: /products/productTypes/4d4242ed-eb8d-46ca-bc3c-13e1f82337c8
        'apiture:productSubtype':
          href: /products/productTypes/fa4f2335-3306-4721-b74c-8ec0c77823e9
      name: Premiere Checking
      label: Premiere Checking
      description: A premiere demand deposit checking account for business use.
      state: active
      type: Demand Deposit
      subtype: Demand Deposit with Interest
      newAccountAvailability: available
      revision: '2018-04-25T07:56:46.375Z'
      _embedded: {}
      ifxType: DDA
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - $ref: '#/definitions/productFields'
      - $ref: '#/definitions/revisionEffectiveInterval'
      - properties:
          - _id
          - type
          - subtype
          - timeDeposit
          - constraints
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product. This field may be localized. The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      code:
        description: >-
          The unique product code for this product, normally defined by the underlying banking core. The `code` cannot be changed once the `state` is
          beyond `pending`.
        type: string
        maxLength: 64
      newAccountAvailability:
        description: >-
          Indicates if the product is available for opening new accounts.
            * *`available`* means the product may be selected for a new account application.
            * *`notAvailable`* means the product may *not* be selected for a new account application.
          The default is `available`. Note that clients must check both the product `state` and the `newAccountAvailability` when listing products for
          new account opening. The `?openable=true` query parameter on `/accounts` combines these. Labels and descriptions for the enumeration values
          are in the `newAccountAvailability` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/newAccountAvailability'
      category:
        description: The product category name. This is a more readable form of the product's `type`.
        type: string
        example: Savings
      rate:
        description: The interest rate for this product.
        allOf:
          - $ref: '#/definitions/rate'
      revision:
        description: The revision string for this product. This property derived and immutable.
        type: string
      ifxType:
        description: The product IFX Account Type.
        allOf:
          - $ref: '#/definitions/ifxType'
      target:
        description: >-
          Describes the target audience or consumer of the accounts, `personal` or `business`. Labels and descriptions for the enumeration values are
          in the `productTarget` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/productTarget'
      effectiveStartAt:
        description: >-
          The date-time when this revision was created and became effective. This is an [RFC 3339](https://tools.ietf.org/html/rfc3339) formatted
          date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable.
        type: string
        format: date-time
      effectiveEndAt:
        description: >-
          The date-time when the another revision became effective and this revision ceased being effective. This is an [RFC
          3339](https://tools.ietf.org/html/rfc3339) formatted date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable and is
          not present until the revision is no longer active.
        type: string
        format: date-time
      _id:
        description: The unique identifier for this product resource. This is an immutable opaque string.
        readOnly: true
        type: string
      type:
        description: 'The product type name, which is derived from the linked product type.'
        type: string
        readOnly: true
      subtype:
        description: 'The product subtype name, which is derived from the linked product subtype. This is a derived, immutable property.'
        type: string
        readOnly: true
      timeDeposit:
        $ref: '#/definitions/timeDeposit'
      constraints:
        $ref: '#/definitions/constraints'
    type: object
    x-apiture-flattened: true
  productDetails:
    title: Product Details (v1.0.0)
    description: Additional fields for a product which are not in the summary representation.
    x-apiture-fragment: true
    type: object
    properties:
      institutionName:
        description: The name of the financial institution
        type: string
        maxLength: 128
        minLength: 1
      coreType:
        description: Identifies the underlying bank core system.
        type: string
      onlineBankingEnabled:
        description: '`true` if this product is enabled and eligible for online banking.'
        type: boolean
        default: false
      currency:
        description: 'The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this product.'
        type: string
        minLength: 3
        maxLength: 3
        example: USD
      fees:
        description: 'Zero or more fees for accounts of this product. If the array is empty or not present, there are no fees.'
        type: array
        items:
          $ref: '#/definitions/fee'
      statementFrequency:
        description: >-
          The frequency with which statememts are issued for accounts of this product. This is expressed as an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) duration; only day and month periods are allowed, and the only allowed
          fractional value for months is 0.5, as in `P5D` or `P14D` or `P1M` or `P0.5M`.
        type: string
        format: period
      timeDeposit:
        $ref: '#/definitions/timeDeposit'
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  timeDeposit:
    title: Time Deposit Products (v1.0.0)
    description: 'Properties of time deposit products, primarily Certificate of Deposit products.'
    properties:
      maturityPolicy:
        $ref: '#/definitions/maturityPolicy'
      minimumTerm:
        description: >-
          The minimum maturity term offered by this product, for products such as certificates of deposits. See also `maximumTerm` For example, Some
          CD products may be opened with a flexible term such as 31 to 181 days, expressed as `minimumTerm: P31D, maximumTerm: P181D` For fixed-term
          products, `minimmumTerm` and `maximumTerm` should be the same.


          This value is an [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of the form `P[n]Y[n]M[n]D` to specify the
          term in the number of years/months/days. For example, the values `P30D`, `P6M`, `P2Y` indicate a term of 30 days, six months, and two years,
          respectively.
        type: string
        format: period
        example: P31D
      maximumTerm:
        description: >-
          The maximum maturity term offered by this product, for products such as certificates of deposits. If omitted, there is no fixed term (not
          all product types impose a term). For example, Some CD products may be opened with a flexible term such as 31 to 181 days, expressed as
          `minimumTerm: P31D, maximumTerm: P181D` For fixed-term products, `minimmumTerm` and `maximumTerm` should be the same.


          This value is an [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of the form `P[n]Y[n]M[n]D` to specify the
          term in the number of years/months/days. For example, the values `P30D`, `P6M`, `P2Y` indicate a term of 30 days, six months, and two years,
          respectively.
        type: string
        format: period
        example: P31D
      fees:
        description: >-
          The time period in which additional deposits may be made to a CD after it has rolled over after maturity. This value applies only if the
          `depositsAllowed` is `duringGracePeriod`. This value is an [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of
          the form `P[n]Y[n]M[n]D` to specify the term in the number of years/months/days.
        type: string
        format: period
    x-apiture-version: 1.0.0
    type: object
    x-apiture-flattened: true
  constraints:
    title: Product Constraints (v1.0.0)
    description: 'Product constraints, such as minimum and maximum balances.'
    type: object
    properties:
      transactionTypes:
        description: The types of transactions permitted for this account. Values which appear in this array are permitted.
        allOf:
          - $ref: '#/definitions/transactionTypes'
        default:
          - debit
          - credit
      minimumBalance:
        description: >-
          The minimum balance for accounts of this product. The numeric value is represented as a string so that it can be exact with no loss of
          precision. This balance is in the `currency` for the product.
        type: string
        example: '500.00'
      minimumFundingAmount:
        description: >-
          The minimum monetary value when funding a new account of this product. The numeric value is represented as a string so that it can be exact
          with no loss of precision. This balance is in the `currency` for the product.
        type: string
        example: '500.00'
      maximumFundingAmount:
        description: >-
          The maximum monetary value when funding a new account of this product. The numeric value is represented as a string so that it can be exact
          with no loss of precision. This balance is in the `currency` for the product.
        type: string
        example: '2500.00'
      minimumTransferAmount:
        description: >-
          The minimum monetary value for new transfers from accounts of this product. The numeric value is represented as a string so that it can be
          exact with no loss of precision. This balance is in the `currency` for the product.
        type: string
        example: '25.00'
      maximumTransferAmount:
        description: >-
          The maximum monetary value for new transfers from accounts of this product. The numeric value is represented as a string so that it can be
          exact with no loss of precision. This balance is in the `currency` for the product.
        type: string
        example: '10000.00'
      maximumWithdrawalCount:
        description: 'The maximum number of withdrawals allowed per cycle. If not present, there is no hard limit.'
        type: integer
        example: 6
      fundingTerm:
        description: >-
          The time limit within which account opening funding must occur after account creation. This is expressed as an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) duration;  only day and month periods are allowed, and the only allowed
          fractional value for months is 0.5, as in `P5D` or `P14D` or `P1M` or `P0.5M`.
        type: string
        format: period
        example: P30D
      depositsRestrictedAfterGracePeriod:
        description: 'If true, deposits are not allowed after the rollover grace period (see `gracePeriod`). This applies to time deposit products only.'
        type: boolean
        default: true
      depositsRestrictedAfterFunding:
        description: 'If true, deposits are not allowed after the initial account funding has completed. This typically applies to time deposit products.'
        type: boolean
        default: true
      gracePeriod:
        description: >-
          A period of time after account rollover when additional deposits are allowed. This is an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) duration;  only day and month periods are allowed, and the only allowed
          fractional value for months is 0.5, as in `P5D` or `P14D` or `P1M` or `P0.5M`.
        type: string
        format: period
        example: P14D
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  maturityPolicy:
    title: Maturity Policy (v1.0.0)
    description: >
      Indicates how the principal and interest are processed upon maturity. The values indicate whether to rollover (to a time deposit account of the
      same rate and term), transfer funds to another (possibly new) deposit account, or simply hold the funds in the current account (which may no
      longer accrue interest). Labels and descriptions for the enumeration values are in the `maturityPolicy` key in the response of the `getLabels`
      operation.


      <strong><code>maturityPolicy</code></strong> strings may have one of the following

      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values

      (described by the named maturityPolicy)


      <table>

      <tr>
        <th>Value</th><th>Description</th>
      </tr>


      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)

      named `maturityPolicy` in the response from the [`getLabels`](#op-getLabels) operation.


      <tr>
          <td><strong><code>rolloverPrincipalAndInterest</code></strong></td><td>Rollover principal and interest to a new CD of the same product: Upon maturity, both principal and interest rollover into a specified banking product, such as a savings, checking, or other deposit account.</td>
          </tr>
      <tr>
          <td><strong><code>transferPrincipalAndInterest</code></strong></td><td>Transfer principal and interest to a deposit account: Upon maturity, the principal an interest are both transferred to an existing or new deposit account.</td>
          </tr>
      <tr>
          <td><strong><code>rolloverPrincipalAndTransferInterest</code></strong></td><td>Transfer interest to a new deposit account an rollover principal to a new CD of the same product: Upon maturity, the principal rolls over into a specified banking product and the interest is transferred to an existing deposit account.</td>
          </tr>
      <tr>
          <td><strong><code>holdPrincipalAndInterest</code></strong></td><td>Hold principal and accued interest in the CD account until withdrawal: Upon maturity, the principal and interest are held in the current time deposit account. The account may or may not accrue further interest, depending on the terms of the time deposit product. Funds may be withdrawn or transferred.</td>
          </tr>
      <tr>
          <td><strong><code>partialTransfer</code></strong></td><td>Partial Transfer: Upon maturity, any funds greater than the maturity threshold is transfered to an existing deposit account and the rest remains on deposit. The account may or may not accrue further interest, depending on the terms of the time deposit product. Funds may be withdrawn or transferred.</td>
          </tr>
      </table>
    type: string
    enum:
      - rolloverPrincipalAndInterest
      - transferPrincipalAndInterest
      - rolloverPrincipalAndTransferInterest
      - holdPrincipalAndInterest
      - partialTransfer
    x-apiture-enum: maturityPolicy
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  createProduct:
    title: Create Product (v1.1.0)
    description: >-
      Representation used to create a new product. The request *must* include links in the `_links` object which refer to the product subtype. (The
      product's type will be the parent type of the named subtype).
        * *`apiture:productSubtype`* A link to the product subtype resource for this product
    x-apiture-version: 1.1.0
    required:
      - name
      - label
      - description
      - code
    example:
      _profile: 'https://api.apiture.com/schemas/products/product/v1.1.0/profile.json'
      name: Business Checking
      label: Business Checking
      description: A demand deposit checking account for business use.
      code: B2001
      category: Checking
      rate:
        value: '1.40'
        type: apr
      card:
        provider:
          id: DDA_203389
        images:
          - height: 1024
            width: 833
            uri: 'http://cdn.3rdparty.bank/images/products/CD-3892/debit-card-large.png'
        activationExpiration: 30
        expeditedShippingAllowed:
          forNew: true
          forReplacements: true
        autoOrder:
          forDigitalAccountOpening: true
          forJointOwners: true
          forAuthorizedSigners: true
      _links:
        'apiture:productSubtype':
          href: /products/productTypes/b2134f56-3645-490d-a788-79e974635ae8
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - $ref: '#/definitions/productFields'
      - $ref: '#/definitions/productDetails'
      - properties:
          - card
          - attributes
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product. This field may be localized. The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      code:
        description: >-
          The unique product code for this product, normally defined by the underlying banking core. The `code` cannot be changed once the `state` is
          beyond `pending`.
        type: string
        maxLength: 64
      newAccountAvailability:
        description: >-
          Indicates if the product is available for opening new accounts.
            * *`available`* means the product may be selected for a new account application.
            * *`notAvailable`* means the product may *not* be selected for a new account application.
          The default is `available`. Note that clients must check both the product `state` and the `newAccountAvailability` when listing products for
          new account opening. The `?openable=true` query parameter on `/accounts` combines these. Labels and descriptions for the enumeration values
          are in the `newAccountAvailability` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/newAccountAvailability'
      category:
        description: The product category name. This is a more readable form of the product's `type`.
        type: string
        example: Savings
      rate:
        description: The interest rate for this product.
        allOf:
          - $ref: '#/definitions/rate'
      revision:
        description: The revision string for this product. This property derived and immutable.
        type: string
      ifxType:
        description: The product IFX Account Type.
        allOf:
          - $ref: '#/definitions/ifxType'
      target:
        description: >-
          Describes the target audience or consumer of the accounts, `personal` or `business`. Labels and descriptions for the enumeration values are
          in the `productTarget` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/productTarget'
      institutionName:
        description: The name of the financial institution
        type: string
        maxLength: 128
        minLength: 1
      coreType:
        description: Identifies the underlying bank core system.
        type: string
      onlineBankingEnabled:
        description: '`true` if this product is enabled and eligible for online banking.'
        type: boolean
        default: false
      currency:
        description: 'The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this product.'
        type: string
        minLength: 3
        maxLength: 3
        example: USD
      fees:
        description: 'Zero or more fees for accounts of this product. If the array is empty or not present, there are no fees.'
        type: array
        items:
          $ref: '#/definitions/fee'
      statementFrequency:
        description: >-
          The frequency with which statememts are issued for accounts of this product. This is expressed as an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) duration; only day and month periods are allowed, and the only allowed
          fractional value for months is 0.5, as in `P5D` or `P14D` or `P1M` or `P0.5M`.
        type: string
        format: period
      timeDeposit:
        $ref: '#/definitions/timeDeposit'
      card:
        description: Debit card details associated with this product.
        allOf:
          - $ref: '#/definitions/productCard'
      attributes:
        type: object
        description: An optional map of name/value pairs which provide additional metadata about the product.
    type: object
    x-apiture-flattened: true
  product:
    title: Product (v1.1.0)
    x-apiture-version: 1.1.0
    description: >
      Representation of product resources. The `_links` in a product may contain the following (which may be passed when creating a product via the
      `POST /products` operation or in `PATCH` operations to this product instance): The representation contains the product type and subtype in the
      `_embedded` objects.



      <h3 class='schema-links' id="product-links" >Links</h3>


      Response and request bodies using this <strong><code>product</code></strong> schema may contain

      the following <a href='https://developer.apiture.com/docs/concepts/links'>links</a>:


      <table>

      <tr>
        <th>Rel</th><th>Summary</th><th>Method</th>
      </tr>


      <tr>

      <td><a href='#op-getProduct'><strong><code>self</code></strong></a></td><td>Fetch a representation of this product</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProductType'><strong><code>apiture:productType</code></strong></a></td><td>Fetch a representation of this product
      type.</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProductType'><strong><code>apiture:productSubtype</code></strong></a></td><td>Fetch a representation of this product
      type.</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-activateProduct'><strong><code>apiture:activate</code></strong></a></td><td>Activate a product</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-deactivateProduct'><strong><code>apiture:deactivate</code></strong></a></td><td>Deactivate a
      product</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-removeProduct'><strong><code>apiture:remove</code></strong></a></td><td>Remove a product</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-lockProduct'><strong><code>apiture:lock</code></strong></a></td><td>Marks an active product as ineligible for new account
      opening</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-unlockProduct'><strong><code>apiture:unlock</code></strong></a></td><td>Marks an active product as eligible for new account
      opening</td><td><code>POST</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProduct'><strong><code>prev</code></strong></a></td><td>Fetch a representation of this product</td><td><code>GET</code></td>

      </tr>


      <tr>

      <td><a href='#op-getProduct'><strong><code>next</code></strong></a></td><td>Fetch a representation of this product</td><td><code>GET</code></td>

      </tr>

      </table>
    x-apiture-links:
      - rel: self
        operationId: getProduct
      - rel: 'apiture:productType'
        operationId: getProductType
      - rel: 'apiture:productSubtype'
        operationId: getProductType
      - rel: 'apiture:activate'
        operationId: activateProduct
      - rel: 'apiture:deactivate'
        operationId: deactivateProduct
      - rel: 'apiture:remove'
        operationId: removeProduct
      - rel: 'apiture:lock'
        operationId: lockProduct
      - rel: 'apiture:unlock'
        operationId: unlockProduct
      - rel: prev
        operationId: getProduct
      - rel: next
        operationId: getProduct
    example:
      _id: a6459cdf-543e-46df-887b-ac5378ee9acd
      _profile: 'https://api.apiture.com/schemas/products/product/v1.0.0/profile.json'
      _links:
        self:
          href: /products/products/a6459cdf-543e-46df-887b-ac5378ee9acd
        'apiture:productType':
          href: /products/productTypes/4d4242ed-eb8d-46ca-bc3c-13e1f82337c8
        'apiture:productSubtype':
          href: /products/productTypes/b2134f56-3645-490d-a788-79e974635ae8
        'apiture:deactivate':
          href: /disabledProducts?product=a6459cdf-543e-46df-887b-ac5378ee9acd
        'apiture:remove':
          href: /removedProducts?product=a6459cdf-543e-46df-887b-ac5378ee9acd
      _embedded:
        productType:
          _id: 4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
          _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
          name: Demand Deposit
          label: Demand Deposit
          description: A demand deposit checking account.
          state: active
          subtype: false
          subtypeCount: 1
          _links:
            self:
              href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
        productSubtype:
          _id: eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
          _profile: 'https://api.apiture.com/schemas/products/productType/v1.0.0/profile.json'
          name: Demand Deposit with Interest
          label: Demand Deposit with Interest
          description: A demand deposit checking account with interest.
          state: active
          subtype: true
          subtypeCount: 0
          _links:
            self:
              href: /products/productTypes/eccb54ed-0f0a-443b-9f2e-32d5b8f4371c
            'apiture:parent':
              href: /products/productTypes/4ea6fe4e-405c-4d71-93e3-ad637b5cab2d
      name: Premiere Checking
      label: Premiere Checking
      description: A premiere demand deposit checking account for business use.
      state: active
      type: Demand Deposit
      subtype: Demand Deposit with Interest
      newAccountAvailability: available
      ifxType: DDA
    x-apiture-composition:
      - $ref: '#/definitions/summaryProduct'
      - $ref: '#/definitions/productDetails'
      - properties:
          - _id
          - attributes
          - _embedded
          - createdAt
          - card
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        type: object
        description: >-
          An optional map of nested resources,  mapping each nested resource name to a nested resource representation. A product contains summary
          representation of the product type and subtype.
        properties:
          productType:
            description: The product type resource.
            allOf:
              - $ref: '#/definitions/summaryProductType'
          productSubtype:
            description: The product subtype resource.
            allOf:
              - $ref: '#/definitions/summaryProductType'
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
      name:
        description: The name of this product.
        type: string
        maxLength: 128
        minLength: 1
      label:
        description: The text label for this product. This field may be localized.
        type: string
        maxLength: 128
        minLength: 1
      description:
        description: >-
          A fuller description of this product. This field may be localized. The content is processed as  [Github Flavored
          Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and thus supports rich text.
        type: string
        maxLength: 4096
        minLength: 1
        format: markdown
      code:
        description: >-
          The unique product code for this product, normally defined by the underlying banking core. The `code` cannot be changed once the `state` is
          beyond `pending`.
        type: string
        maxLength: 64
      newAccountAvailability:
        description: >-
          Indicates if the product is available for opening new accounts.
            * *`available`* means the product may be selected for a new account application.
            * *`notAvailable`* means the product may *not* be selected for a new account application.
          The default is `available`. Note that clients must check both the product `state` and the `newAccountAvailability` when listing products for
          new account opening. The `?openable=true` query parameter on `/accounts` combines these. Labels and descriptions for the enumeration values
          are in the `newAccountAvailability` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/newAccountAvailability'
      category:
        description: The product category name. This is a more readable form of the product's `type`.
        type: string
        example: Savings
      rate:
        description: The interest rate for this product.
        allOf:
          - $ref: '#/definitions/rate'
      revision:
        description: The revision string for this product. This property derived and immutable.
        type: string
      ifxType:
        description: The product IFX Account Type.
        allOf:
          - $ref: '#/definitions/ifxType'
      target:
        description: >-
          Describes the target audience or consumer of the accounts, `personal` or `business`. Labels and descriptions for the enumeration values are
          in the `productTarget` key in the response of the `getLabels` operation.
        allOf:
          - $ref: '#/definitions/productTarget'
      effectiveStartAt:
        description: >-
          The date-time when this revision was created and became effective. This is an [RFC 3339](https://tools.ietf.org/html/rfc3339) formatted
          date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable.
        type: string
        format: date-time
      effectiveEndAt:
        description: >-
          The date-time when the another revision became effective and this revision ceased being effective. This is an [RFC
          3339](https://tools.ietf.org/html/rfc3339) formatted date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable and is
          not present until the revision is no longer active.
        type: string
        format: date-time
      _id:
        description: The unique identifier for this product resource. This is an immutable opaque string.
        readOnly: true
        type: string
      type:
        description: 'The product type name, which is derived from the linked product type.'
        type: string
        readOnly: true
      subtype:
        description: 'The product subtype name, which is derived from the linked product subtype. This is a derived, immutable property.'
        type: string
        readOnly: true
      timeDeposit:
        $ref: '#/definitions/timeDeposit'
      constraints:
        $ref: '#/definitions/constraints'
      institutionName:
        description: The name of the financial institution
        type: string
        maxLength: 128
        minLength: 1
      coreType:
        description: Identifies the underlying bank core system.
        type: string
      onlineBankingEnabled:
        description: '`true` if this product is enabled and eligible for online banking.'
        type: boolean
        default: false
      currency:
        description: 'The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this product.'
        type: string
        minLength: 3
        maxLength: 3
        example: USD
      fees:
        description: 'Zero or more fees for accounts of this product. If the array is empty or not present, there are no fees.'
        type: array
        items:
          $ref: '#/definitions/fee'
      statementFrequency:
        description: >-
          The frequency with which statememts are issued for accounts of this product. This is expressed as an [ISO 8601
          duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) duration; only day and month periods are allowed, and the only allowed
          fractional value for months is 0.5, as in `P5D` or `P14D` or `P1M` or `P0.5M`.
        type: string
        format: period
      attributes:
        type: object
        description: An optional map of name/value pairs which provide additional metadata about the product type.
      createdAt:
        description: The date-time when this product was created. This value is derived and immutable.
        type: string
        format: date-time
        readOnly: true
      card:
        description: Debit card details associated with this product.
        allOf:
          - $ref: '#/definitions/productCard'
    type: object
    x-apiture-flattened: true
  products:
    title: Product Collection (v1.0.0)
    description: >-
      Collection of products. The items in the collection are ordered in the `_embedded` object with name `items`. The top-level `_links` object may
      contain pagination links (`self`, `next`, `prev`, `first`, `last`, `collection`).
    example:
      _profile: 'https://api.apiture.com/schemas/products/products/v1.0.0/profile.json'
      start: 0
      limit: 10
      count: 42
      name: products
      _links:
        self:
          href: /products?start=0&limit=10
        first:
          href: /products?start=10&limit=10
        next:
          href: /products?start=10&limit=10
        collection:
          href: /products
      _embedded:
        items:
          - _id: a6459cdf-543e-46df-887b-ac5378ee9acd
            name: Premiere Checking
            label: Premiere Checking
            description: A premiere demand deposit checking account for business use.
            state: active
            newAccountAvailability: available
            category: Checking
            revision: {}
            rate:
              value: '1.40'
              type: apr
            _links:
              'apiture:productType':
                href: /products/productTypes/4d4242ed-eb8d-46ca-bc3c-13e1f82337c8
              'apiture:productSubtype':
                href: /products/productTypes/b2134f56-3645-490d-a788-79e974635ae8
              self:
                href: /products/products/a6459cdf-543e-46df-887b-ac5378ee9acd
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/collection'
      - properties:
          - _embedded
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: Embedded objects
        type: object
        properties:
          items:
            description: An array containing a page of product items.
            type: array
            items:
              $ref: '#/definitions/summaryProduct'
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      count:
        description: >-
          The number of items in the collection. This value is _optional_ and may be omitted if the count is not computable efficiently. If a filter
          is applied to the collection (either implicitly or explicitly), the count, if present, indicates the number of items that satisfy the
          filter.
        type: integer
      start:
        description: The start index of this page of items.
        type: integer
      limit:
        description: The maximum number of items per page.
        type: integer
      name:
        description: The name of the collection.
        type: string
    type: object
    x-apiture-flattened: true
  productCard:
    title: Product Card Details (v1.0.0)
    description: Debit card details associated with this product.
    type: object
    required:
      - provider
      - images
      - activationExpiration
    properties:
      provider:
        description: Details of the card provider.
        allOf:
          - $ref: '#/definitions/cardProvider'
      images:
        description: Image (JPEG or PNG) of a sample blank debit card for this product.
        type: array
        minItems: 1
        items:
          $ref: '#/definitions/cardImage'
      activationExpiration:
        description: 'After a card is issued, it must be activated before this many days before the card activation expires.'
        type: integer
        minimum: 7
        example: 30
      expeditedShippingAllowed:
        description: Indicates if the bank customer can request expedited shipping for cards associated with the accounts for this product.
        allOf:
          - $ref: '#/definitions/expeditedShippingAllowed'
      autoOrder:
        description: Whether the financial institution will automatically order new debit cards for bank customers.
        allOf:
          - $ref: '#/definitions/autoOrderCards'
    example:
      provider:
        id: DDA_203389
      images:
        - height: 1024
          width: 833
          uri: 'http://cdn.3rdparty.bank/images/products/CD-3892/debit-card-large.png'
      activationExpiration: 30
      expeditedShippingAllowed:
        forNew: true
        forReplacements: true
      autoOrder:
        forDigitalAccountOpening: true
        forJointOwners: true
        forAuthorizedSigners: true
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  autoOrderCards:
    title: Automatically Order Cards (v1.0.0)
    description: >-
      Configuration for whether the financial institution automatically orders new debit cards for primary applicants or other account holders. New
      cards are not ordered during user/account migration.
    type: object
    properties:
      forDigitalAccountOpening:
        description: >-
          If `true`, the financial institution will automatically order a debit card for the primary applicant after opening a new account associated
          with this product via the digital account opening process.
        type: boolean
        default: false
      forJointOwners:
        description: >-
          If `true`, the financial institution will automatically order a debit card for new joint owners when they become an account holder on a
          personal account associated with this product.
        type: boolean
        default: false
      forAuthorizedSigners:
        description: >-
          If `true`, the financial institution will automatically order a debit card for the organization's existing authorized signers or when a new
          authorized signer becomes an account holder on accounts associated with this product. If both `forDigitalAccountOpening` and
          `forAuthorizedSigners` are true, the applicant receives only one card even though they may be listed in the organization's authorized
          signers.
        type: boolean
        default: false
    example:
      forDigitalAccountOpening: true
      forJointOwners: true
      forAuthorizedSigners: true
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  cardProvider:
    title: Card Provider Details (v1.0.0)
    description: Details of the debit card processor/provider.
    type: object
    required:
      - id
    properties:
      id:
        description: The unique identifier for this product within the card provider's environment.
        type: string
        readOnly: true
        example: DDA_203389
    example:
      id: DDA_203389
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  expeditedShippingAllowed:
    title: Expedited Shipping Allowed (v1.0.0)
    description: Indicates if the bank customer can request expedited shipping for cards associated with the accounts for this product.
    properties:
      forNew:
        description: 'If `true`, expedited shipping is allowed for _new_ cards.'
        type: boolean
        default: false
      forReplacements:
        description: 'If `true`, expedited shipping is allowed for _replacement_ cards (reorders).'
        type: boolean
        default: false
    example:
      forNew: true
      forReplacements: true
    x-apiture-version: 1.0.0
    type: object
    x-apiture-flattened: true
  cardImage:
    title: Card Image Details (v1.0.0)
    description: >-
      Details of a debug card image for this product. The `height` and `width` are optional but should be provided if the `card.images` object
      contains more than one image, so that clients can choose the most appropriate image size. The image may have portrait or landscape orientation,
      but the maximum aspect ratio is 2:1 ([IEC 7810](https://en.wikipedia.org/wiki/ISO/IEC_7810#ID-1) is 85.60:53.98, approximately 1.6:1).
    type: object
    required:
      - uri
    properties:
      height:
        description: 'The image height, in pixels.'
        type: integer
        minimum: 64
        maximum: 4096
      width:
        description: 'The image width, in pixels.'
        type: integer
        minimum: 64
        maximum: 4096
      uri:
        description: >-
          The image URI which a client can fetch in order to render the sample card image in the client. This resource does not require
          authentication.
        type: string
        format: uri
        maxLength: 2048
    example:
      height: 1024
      width: 833
      uri: 'http://cdn.3rdparty.bank/images/products/DDA_203389/debit-card-large.png'
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  productState:
    title: State of a Product or Product Type (v1.0.0)
    description: The state of a product or type.
    x-apiture-fragment: true
    properties:
      state:
        description: >-
          The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


          The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product
          or product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.
        allOf:
          - $ref: '#/definitions/prodState'
    x-apiture-version: 1.0.0
    type: object
    x-apiture-flattened: true
  prodState:
    title: Product or Product Type State (v1.0.0)
    description: >
      The state of this product or product type. New resources are `pending` by default and must be activated before they may be used.


      The `state` property is immutable and derived and may not be changed via the `PUT` or `PATCH` operations. To change the state of a product or
      product type, use the `POST` operation using the `apiture:activate`, `apiture:deactivate` or `apiture:remove` links on the resource.


      <strong><code>prodState</code></strong> strings may have one of the following

      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values

      (described by the named prodState)


      <table>

      <tr>
        <th>Value</th><th>Description</th>
      </tr>


      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)

      named `prodState` in the response from the [`getLabels`](#op-getLabels) operation.


      <tr>
          <td><strong><code>pending</code></strong></td><td>This product has been created in draft form but is not yet available</td>
          </tr>
      <tr>
          <td><strong><code>active</code></strong></td><td>This product is active and available for use</td>
          </tr>
      <tr>
          <td><strong><code>inactive</code></strong></td><td>This product is temporarily not available for use</td>
          </tr>
      <tr>
          <td><strong><code>removed</code></strong></td><td>This product has been removed and is permanently not available for use</td>
          </tr>
      </table>
    type: string
    enum:
      - pending
      - active
      - inactive
      - removed
    default: pending
    x-apiture-enum: prodState
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  rate:
    title: Interest Rate (v1.0.0)
    description: >-
      The interest rate of the account. For deposit accounts, this is the rate of return; for loan accounts, this is the interest rate charged on
      balances. Rates can be absolute, such as "1.40" to indicate 1.4%, which is expressed as  `{ "value" : "1.40" }`, or relative to a benchmark,
      such as U.S. Prime Rate + 0.5% which is expressed as `{ "benchmark" : "prime", "value" : "0.50" }`.
    properties:
      value:
        description: >-
          The rate, expressed as an decimal percentage string in order to represent the rate exactly. This number must have 2 to four decimal points,
          i.e. '2.00' or '0.50' or '1.015', but not `2` or `.5`. (Regular expression pattern: `-?\d{1,3}+\.\d{2,4}`)
        type: string
        example: '1.40'
      benchmark:
        description: >-
          An optional base benchmark that the rate is relative to. If omitted, the rate is fixed. Otherwise the rate is added to the benchmark rate.
          Values may be (but are not limited to):
           * *`primeUS`* - the [U.S. Prime rate](https://en.wikipedia.org/wiki/Prime_rate)
           * *`treasuryUS`* - The [U.S. Treasury rate](https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yieldAll)
           * *`libor`* - the [London Inter-bank Offered Rates](https://en.wikipedia.org/wiki/Libor) rate
        type: string
        example: prime
      compoundPeriod:
        description: >-
          The period at which interest compounds.


          This value is an [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of the form `P[n]Y[n]M[n]D` to specify the
          term in the number of years/months/days. The default is `"P0D"` (continuous).
        type: string
        example: P7D
      accrualType:
        description: Indicates how interest is accrued according to the `compoundPeriod`.
        allOf:
          - $ref: '#/definitions/accrualType'
      adjustmentPeriod:
        description: >-
          The period at which the rate is adjusted or recomputed to account for differences in the benchmark rate.


          This value is an [ISO 8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string of the form `P[n]Y[n]M[n]D` to specify the
          term in the number of years/months/days; The default is `"P1D"` (daily).
        type: string
        example: P1D
      type:
        description: The interest rate type.
        type: string
        allOf:
          - $ref: '#/definitions/interestRateType'
    example:
      value: '1.40'
      type: apr
    x-apiture-version: 1.0.0
    type: object
    x-apiture-flattened: true
  accrualType:
    title: Accrual Type (v1.0.0)
    description: |
      Indicates how interest is accrued according to the `compoundPeriod`.

      <strong><code>accrualType</code></strong> strings may have one of the following
      [enumerated values](https://developer.apiture.com/concepts/label-groups#enumerations) values
      (described by the named accrualType)

      <table>
      <tr>
        <th>Value</th><th>Description</th>
      </tr>

      These enumeration values are further described by the [label group](https://developer.apiture.com/concepts/label-groups)
      named `accrualType` in the response from the [`getLabels`](#op-getLabels) operation.

      <tr>
          <td><strong><code>compounding</code></strong></td><td>Compounding interest</td>
          </tr>
      <tr>
          <td><strong><code>simple</code></strong></td><td>Simple interest</td>
          </tr>
      </table>
    type: string
    enum:
      - compounding
      - simple
    x-apiture-enum: accrualType
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  interestRateType:
    title: Interest Rate Type (v1.0.0)
    description: |-
      The rate type. The rate type may not be changed once it is set at product creation. Rate types are:
        * *`apr`* - annual percentage rate
        * *`apy`* - annual percentage yield
    type: string
    enum:
      - apr
      - apy
    example: apr
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  errorResponse:
    x-apiture-version: 2.0.0
    title: Error Response
    description: 'Describes an error response, typically returned on 4xx or 5xx errors from API operations. The `_error` object contains the error details.'
    example:
      _profile: 'https://api.apiture.com/schemas/common/errorResponse/v2.0.0/profile.json'
      _error:
        _id: 2eae46e1-575c-4d69-8a8f-0a7b0115a4b3
        message: The value for deposit must be greater than 0.
        statusCode: 422
        type: positiveNumberRequired
        attributes:
          value: -125.5
        remediation: Provide a value which is greater than 0
        occurredAt: '2018-01-25T05:50:52.375Z'
        _links:
          describedby:
            href: 'https://api.apiture.com/errors/positiveNumberRequired'
        _embedded:
          errors: []
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/errorResponse/v2.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
    type: object
    x-apiture-flattened: true
  root:
    x-apiture-version: 2.0.0
    title: API Root
    description: 'A HAL response, with hypermedia `_links` for the top-level resources and operations in API.'
    example:
      id: apiName
      name: API name
      apiVersion: 1.0.0
      _profile: 'https://production.api.apiture.com/schemas/common/root/v2.0.0/profile.json'
      _links: {}
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/root/v2.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - properties:
          - _id
          - name
          - apiVersion
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      _id:
        description: This API's unique ID.
        readOnly: true
        type: string
      name:
        type: string
        description: This API's name.
      apiVersion:
        type: string
        description: This API's version.
    type: object
    x-apiture-flattened: true
  labelGroups:
    title: Label Groups
    description: |-
      A set of named groups of labels, each of which contains multiple item labels.


      The abbreviated example shows two groups, one named `structure` and one named `estimatedAnnualRevenue`.
      The first has items with names such as `corporation`, `llc` and `soleProprietorship`,
      with text labels for each in the default and in French. The second has
      items for estimated revenue *ranges* but no localized labels. For example, the item named `from1to10Million`
      has the `label` "$1M to $10M" and the range `[1000000.00,10000000.00)`.
    example:
      _profile: 'https://production.api.apiture.com/schemas/common/labelGroups/v1.0.0/model.json'
      groups:
        structure:
          unknown:
            label: Unknown
            code: '0'
            hidden: true
          corporation:
            label: Corporation
            code: '1'
            variants:
              fr:
                label: Soci\u00e9t\u00e9
          partnership:
            label: Partnership
            code: '2'
            variants:
              fr:
                label: Partenariat
          llc:
            label: Limited Liability Company
            code: '2'
            variants:
              fr:
                label: Soci\u00e9t\u00e9 \u00e9 Responsabilit\u00e9 Limit\u00e9e
          nonProfit:
            label: Non Profit
            code: '4'
            variants:
              fr:
                label: Non Lucratif
          financialInstitution:
            label: Financial Institution
            code: '8'
            variants:
              fr:
                label: Institution financi\u00e8re
          soleProprietorship:
            label: Sole Proprietorship
            code: '11'
            variants:
              fr:
                label: Entreprise individuelle
          other:
            label: Other
            code: '254'
            variants:
              fr:
                label: Autre
        estimatedAnnualRevenue:
          unknown:
            label: Unknown
            code: '0'
          under1Million:
            label: Under $1M
            code: '1'
            range: '[0,1000000.00)'
          from1to10Million:
            label: $1M to $10M
            code: '2'
            range: '[1000000.00,10000000.00)'
          from10to100Million:
            label: $10M to $100M
            code: '3'
            range: '[10000000.00,100000000.00)'
          over100Million:
            label: 'Over $100,000,000.00'
            code: '4'
            range: '[100000000.00,]'
          other:
            label: Other
            code: '254'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/labelGroups/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - properties:
          - groups
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      groups:
        description: 'Groups of localized labels. This maps *group names* &rarr; [*a group of labels*](#schema-labelgroup) within that group.'
        x-apiture-key: groupName
        additionalProperties:
          $ref: '#/definitions/labelGroup'
    type: object
    x-apiture-flattened: true
  abstractResource:
    x-apiture-version: 2.0.0
    title: Abstract Resource
    description: >-
      An abstract schema used to define other schemas for request and response bodies. This is a
      [HAL](https://tools.ietf.org/html/draft-kelly-json-hal-08) resource representation. This model contains hypermedia `_links`, and either optional
      domain object data with `_profile` and optional `_embedded` objects, or an `_error` object. In responses, if the operation was successful, this
      object will not include the `_error`, but if the operation was a 4xx or 5xx error, this object will not include `_embedded` or any data fields,
      only `_error` and optionally `_links`.
    example:
      _profile: '{uri of resource profile.json}'
      _links:
        self:
          href: '{uri of current resource}'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/abstractResource/v2.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-composition:
      - $ref: '#/definitions/abstractRequest'
      - properties:
          - _error
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
    type: object
    x-apiture-flattened: true
  collection:
    x-apiture-version: 2.0.0
    title: Collection
    description: A collection of resources. This is an abstract model schema which is extended to define specific resource collections.
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/collection/v2.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-composition:
      - $ref: '#/definitions/abstractResource'
      - properties:
          - count
          - start
          - limit
          - name
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
      _error:
        description: An object which describes an error. This value is omitted if the operation succeeded without error.
        type: object
        allOf:
          - $ref: '#/definitions/error'
      count:
        description: >-
          The number of items in the collection. This value is _optional_ and may be omitted if the count is not computable efficiently. If a filter
          is applied to the collection (either implicitly or explicitly), the count, if present, indicates the number of items that satisfy the
          filter.
        type: integer
      start:
        description: The start index of this page of items.
        type: integer
      limit:
        description: The maximum number of items per page.
        type: integer
      name:
        description: The name of the collection.
        type: string
    type: object
    x-apiture-flattened: true
  revisionEffectiveInterval:
    title: Revision Effective Time Interval
    description: Time interval when a resource revision was effective and in use. This schema is used when composing other schemas.
    type: object
    properties:
      effectiveStartAt:
        description: >-
          The date-time when this revision was created and became effective. This is an [RFC 3339](https://tools.ietf.org/html/rfc3339) formatted
          date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable.
        type: string
        format: date-time
      effectiveEndAt:
        description: >-
          The date-time when the another revision became effective and this revision ceased being effective. This is an [RFC
          3339](https://tools.ietf.org/html/rfc3339) formatted date-time string `YYYY-MM-DDThh:mm:ss.sssZ`. This field is derived and immutable and is
          not present until the revision is no longer active.
        type: string
        format: date-time
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/revisionEffectiveInterval/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
  labelGroup:
    title: Label Group
    description: >-
      A map that defines labels for the items in a group. This is a map from each item *name* &rarr; *a [`labelItem`](#schema-labelitem) object*. For
      example, consider a JSON response that includes a property named `revenueEstimate`; the values for `revenueEstimate` must be one of the items in
      the group named `estimatedAnnualRevenue`, with options ranging `under1Million`, to `over100Million`. The item name is used as the selected value
      in an Apiture representation, such as `{ ..., "revenueEstimate" : "from10to100Million" , ...}`, and the item with the name `from10to100Million`
      defines the presentation labels for that item, as well as other metadata about that choice: this is the range `[10000000.00,100000000.00)`.


      This allows the client to let the user select a value from a list, such as the following derivde from the labels in the example:

        * Unknown
        * Under $1M
        * $1M to $10M
        * $10M to $100M
        * $100M or more

      Note that the `other` item is hidden from the selection list, as that item is marked as `hidden`. For items which define numeric ranges, a
      client may instead let the customer *directly* enter their estimated annual revenue as a number, such as 4,500,000.00. The client can then match
      that number to one of ranges in the items and set the `revenueEstimate` to the corresponding item's name: `{ ..., "revenueEstimate" :
      "from1to10Million", ... }`.
    x-apiture-key: labelName
    additionalProperties:
      $ref: '#/definitions/labelItem'
    example:
      unknown:
        label: Unknown
        code: '0'
        hidden: true
      under1Million:
        label: Under $1M
        code: '1'
        range: '[0,1000000.00)'
        variants:
          fr:
            label: Moins de $1M
      from1to10Million:
        label: $1M to $10M
        code: '2'
        range: '[1000000.00,10000000.00)'
        variants:
          fr:
            label: $1M \u00e0 $10M
      from10to100Million:
        label: $10M to $100M
        code: '3'
        range: '[10000000.00,100000000.00)'
        variants:
          fr:
            - label $10M \u00e0 $100M
      over100Million:
        label: 'Over $100,000,000.00'
        code: '4'
        range: '[100000000.00,]'
        variants:
          fr:
            label: Plus de $10M
      other:
        label: Other
        code: 254
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/labelGroup/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    type: object
    properties: {}
    x-apiture-flattened: true
  abstractRequest:
    x-apiture-version: 2.0.0
    title: Abstract Request
    description: >-
      An abstract schema used to define other request-only schemas. This is a [HAL](https://tools.ietf.org/html/draft-kelly-json-hal-08) resource
      representation, minus the `_error` defined in `abstractResource`.
    properties:
      _links:
        description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
        $ref: '#/definitions/links'
      _embedded:
        description: 'An optional map of nested resources, mapping each nested resource name to a nested resource representation.'
        type: object
      _profile:
        description: 'The URI of a [resource profile](https://developer.apiture.com/docs/concepts/profiles/) which describes the representation.'
        type: string
        format: uri
    example:
      _profile: '{uri of resource profile.json}'
      _links:
        self:
          href: '{uri of current resource}'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/abstractRequest/v2.0.0/model.json'
    x-apiture-namespace: common
    type: object
    x-apiture-flattened: true
  error:
    x-apiture-version: 2.0.0
    title: Error
    description: Describes an error in an API request or in a service called via the API.
    required:
      - message
    properties:
      message:
        type: string
        description: A localized message string describing the error condition.
      _id:
        description: >-
          A unique identifier for this error instance. This may be used as a correlation ID with the root cause error (i.e. this ID may be logged at
          the source of the error). This is is an opaque string.
        readOnly: true
        type: string
      statusCode:
        description: The HTTP status code associate with this error.
        type: integer
        minimum: 100
        maximum: 599
        example: 422
      type:
        type: string
        description: >-
          An error identifier which indicates the category of error and associate it with API support documentation or which the UI tier can use to
          render an appropriate message or hint. This provides a finer level of granularity than the `statusCode`. For example, instead of just 400
          Bad Request, the `type` may be much more specific. such as `integerValueNotInAllowedRange` or `numericValueExceedsMaximum` or
          `stringValueNotInAllowedSet`.
      occurredAt:
        type: string
        format: date-time
        description: 'An [RFC 3339](https://tools.ietf.org/html/rfc3339) UTC time stamp indicating when the error occurred.'
        example: '2018-02-02T03:37:15.375Z'
      attributes:
        description: >-
          Informative values or constraints which describe the error. For example, for a value out of range error, the attributes may specify the
          `minimum` and `maximum` values. This allows clients to present error messages as they see fit (the API does not assume the
          client/presentation tier). The set of attributes varies by error `type`.
        allOf:
          - $ref: '#/definitions/attributes'
      remediation:
        type: string
        description: An optional localized string which provides hints for how the user or client can resolve the error.
      errors:
        description: An optional array of nested error objects. This property is not always present.
        type: array
        items:
          $ref: '#/definitions/error'
      _links:
        $ref: '#/definitions/links'
    example:
      _id: 2eae46e1575c0a7b0115a4b3
      message: Descriptive error message...
      statusCode: 422
      type: errorType1
      remediation: Remediation string...
      occurredAt: '2018-01-25T05:50:52.375Z'
      errors:
        - _id: ccdbe2c5c938a230667b3827
          message: An optional embedded error
        - _id: dbe9088dcfe2460f229338a3
          message: Another optional embedded error
      _links:
        describedby:
          href: 'https://developer.apiture.com/errors/errorType1'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/error/v2.0.0/model.json'
    x-apiture-namespace: common
    type: object
    x-apiture-flattened: true
  links:
    title: Links
    description: 'An optional map of links, mapping each link relation to a link object. This model defines the `_links` object of HAL representations.'
    type: object
    x-apiture-key: linkRelationName
    additionalProperties:
      $ref: '#/definitions/link'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/links/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    properties: {}
    x-apiture-flattened: true
  labelItem:
    title: Label Item
    description: >-
      An item in a [`labelGroup`](#schema-labelgroup), with a set of `variants` which contains different localized labels for the item. Each
      ([`simpleLabel`](#schema-simpleLabel)) variant defines the presentation text label and optional description for a language. Items may also have
      a lookup `code` to map to external syststems, a numeric range, and a `hidden` boolean to indicate the item is normally hidden in the UI.
    example:
      over100Million:
        label: 'Over $100,000,000.00'
        code: '4'
        range: '[100000000.00,]'
        variants:
          fr:
            label: Plus de $10M
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/labelItem/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    x-apiture-composition:
      - $ref: '#/definitions/simpleLabel'
      - properties:
          - variants
          - code
          - hidden
          - range
    properties:
      label:
        type: string
        description: A label or title which may be used as labels or other UI controls which present a value.
        example: Board of Directors
      description:
        type: string
        description: A more detailed localized description of a localizable label.
      variants:
        description: >-
          The language-specific variants of this label. The keys in this object are [RFC 7231](https://tools.ietf.org/html/rfc7231#section-3.1.3.1)
          language codes.
        x-apiture-key: languageCode
        type: object
        additionalProperties:
          $ref: '#/definitions/simpleLabel'
        example:
          en:
            label: More then $10M
          es:
            label: Mas de $10M
          fr:
            label: Plus de $10M
      code:
        type: string
        description: 'If the localized value is associated with an external standard or definition, this is a lookup code or key or URI for that value.'
        example: '3'
        minLength: 1
      hidden:
        type: boolean
        description: 'If `true`, this item is normally hidden from the User Interface.'
      range:
        description: >-
          The range of values, if the item describes a bounded numeric value. This is range notation such as `[min,max]`, `(exclusiveMin,max]`,
          `[min,exclusiveMax)`, or `(exclusiveMin,exclusiveMax)`. For example, `[0,100)` is the range greater than or equal to 0 and less than 100. If
          the *min* or *max* value are omitted, that end of the range is unbounded. For example, `(,1000.00)` means less than 1000.00 and
          `[20000.00,]` means 20000.00 or more. The ranges do not overlap or have gaps.
        type: string
        pattern: '^[\[\(](-?(0|[1-9][0-9]*)(\.[0-9]+)?)?,(-?(0|[1-9][0-9]*)(\.[0-9]+)?)?[\]\)]$'
    type: object
    x-apiture-flattened: true
  attributes:
    x-apiture-version: 2.0.0
    title: Attributes
    description: An optional map of name/value pairs which contains additional dynamic data about the resource.
    type: object
    x-apiture-key: attributeName
    additionalProperties:
      $ref: '#/definitions/attributeValue'
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/attributes/v2.0.0/model.json'
    x-apiture-namespace: common
    properties: {}
    x-apiture-flattened: true
  link:
    x-apiture-version: 1.0.0
    title: Link
    description: >-
      Describes a hypermedia link within a `_links` object in HAL representations. In Apiture APIs, links are [HAL
      links](https://developer.apiture.com/docs/concepts/links), but Apiture APIs do not use the `name` or `hreflang` properties of HAL. Apiture links
      _may_ include a `method` property.
    required:
      - href
    properties:
      href:
        type: string
        format: uri
        description: The URI or URI template for the resource/operation this link refers to.
      type:
        type: string
        description: The media type for the resource.
      templated:
        type: boolean
        description: 'If true, the link''s href is a [URI template](https://tools.ietf.org/html/rfc6570).'
      title:
        type: string
        description: An optional human-readable localized title for the link.
      deprecation:
        type: string
        format: uri
        description: 'If present, the containing link is deprecated and the value is a URI which provides human-readable text information about the deprecation.'
      profile:
        type: string
        format: uri
        description: 'The URI of a profile document, a JSON document which describes the target resource/operation.'
    example:
      href: /contacts/contacts/328f6bf6-d762-422f-a077-ab91ca4d0b6f
      title: Applicant
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/link/v1.0.0/model.json'
    x-apiture-namespace: common
    type: object
    x-apiture-flattened: true
  attributeValue:
    x-apiture-version: 2.0.0
    title: Attribute Value
    description: The data associated with this attribute.
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/attributeValue/v2.0.0/model.json'
    x-apiture-namespace: common
    type: object
    properties: {}
    x-apiture-flattened: true
  simpleLabel:
    title: Simple Label
    description: A text label and optional description.
    type: object
    required:
      - label
    properties:
      label:
        type: string
        description: A label or title which may be used as labels or other UI controls which present a value.
        example: Board of Directors
      description:
        type: string
        description: A more detailed localized description of a localizable label.
    x-apiture-resolved-from: 'https://production.api.apiture.com/schemas/common/simpleLabel/v1.0.0/model.json'
    x-apiture-namespace: common
    x-apiture-version: 1.0.0
    x-apiture-flattened: true
x-apiture-errors:
  accessDenied:
    description: The credentials supplied in the request are insufficient to grant access
    remediation: Check the supplied credentials for validity
  invalidProductId:
    description: No Products were found for the specified productId
    remediation: Check to make sure that the supplied productId corresponds to an apiture product resource
  invalidProductTypeId:
    description: No product types were found for the specified productTypeId
    remediation: Check to make sure that the supplied productType corresponds to an apiture product type resource
  ifMatchHeaderMissing:
    description: Precondition Required. The request did not include the required if-Match header
    remediation: 'Resubmit with the operation, supplying the value of the ETag and the most recent state of the resource'
  ifMatchHeaderDoesntMatch:
    description: The supplied `if-Match` header value does not match the most recent `ETag` response header value. The resource has changed in the interim
    remediation: 'Resubmit the operation, supplying the value of the ETag and the most recent state of the resource'
  malformedProduct:
    description: The supplied product was malformed
    remediation: Check to make sure that the supplied product parameter corresponds to an apiture product resource
    attributes:
      properties:
        product:
          type: string
          description: The URI or the ID of an existing product
  malformedProductType:
    description: The supplied productType was malformed
    remediation: Check to make sure that the supplied productType corresponds to an apiture productType resource
    attributes:
      properties:
        productType:
          type: string
          description: The invalid product type URI.
  malformedRequestBody:
    description: The supplied request body was malformed
    remediation: Check to make sure that your request body exists and that it does not contain syntax errors
  malformedCreateProductBody:
    description: The supplied request body to create a product did not contain a description or label
    remediation: Resubmit the request with a description and label in the body
  canOnlyLockUnlockActive:
    description: You can only lock or unlock a product if its state is `active`
    remediation: Activate the product and resubmit the operation
  invalidProductState:
    description: The supplied product state is invalid
    remediation: 'Resubmit the operation, supplying a valid product state'
    attributes:
      properties:
        validStates:
          description: The required states for this operation
          type: array
          items:
            type: string
            enum:
              - active
              - inactive
              - pending
              - removed
  invalidAccountAvailability:
    description: The product new account availability is not valid
    remediation: Resubmit the operation and supply a valid product new account availability value
  invalidTransactionTypes:
    description: The given transaction type is not valid
    remediation: Resubmit the operation and supply a valid transaction type
  invalidConstraintMaxFundingAmount:
    description: The given maximumFundingAmount value is not valid
    remediation: >-
      Check to make sure the maximumFundingAmount is a valid numerical value. Also make sure the value is greater than minimum value and the value is
      greater than 0
  invalidConstraintMaxTransferAmount:
    description: The given maximumTransferAmount value is not valid
    remediation: >-
      Check to make sure the maximumTransferAmount is a valid numerical value. Also make sure the value is greater than minimum value and the value is
      greater than 0
  invalidConstraintMinBalance:
    description: The given minimumBalance value is not valid
    remediation: >-
      Check to make sure the minimumBalance is a valid numerical value. Also make sure the value is greater than minimum value and the value is
      greater than 0
  invalidConstraintMinFundingAmount:
    description: The given minimumFundingAmount value is not valid
    remediation: >-
      Check to make sure the minimumFundingAmount is a valid numerical value. Also make sure the value is greater than minimum value and the value is
      greater than 0
  invalidConstraintMinTransferAmount:
    description: The given minimumTransferAmount value is not valid
    remediation: >-
      Check to make sure the minimumTransferAmount is a valid numerical value. Also make sure the value is greater than minimum value and the value is
      greater than 0
  invalidConstraintItemAmount:
    description: The given fees item amount value is not valid
    remediation: Check to make sure the fees item amount is a valid numerical value. Also make sure the value is greater than 0
  invalidProductLinkToSubType:
    description: 'A link to apiture:productSubtype is missing or is invalid'
    remediation: Check to make sure the product has a valid subtype or that the subtype exists
  invalidRateValues:
    description: The rate object contains invalid values
    remediation: Check the values of the rate object and resubmit
  invalidFeesType:
    description: The fee must be an array
    remediation: Check the type of the fee field and resubmit
  cannotPatchProductFields:
    description: A products _id and newAccountAvailability cannot be patched
    remediation: Remove the _id and newAccountAvailability from the request body and try again
  activateProductInvalidState:
    description: Products may only be activated if they are in an inactive or pending state
    remediation: Check the state of your Product and the applicable allowed state transitions in the Products API documentation
  removeProductInvalidState:
    description: Products may only be removed if they are in an inactive or active state
    remediation: Check the state of your Product and the applicable allowed state transitions in the Products API documentation
  deactivateProductInvalidState:
    description: Products may only be deactivated if they are in a pending or active state
    remediation: Check the state of your Product and the applicable allowed state transitions in the Products API documentation
  deleteProductInvalidState:
    description: Products may only be deleted if they are in a pending state
    remediation: Check the state of your Product and the applicable allowed state transitions in the Products API documentation
  cannotChangeRateType:
    description: The products rate type may not be changed once created
    remediation: Remove the product and recreate it with the desired rate type or create a new product
  productStateCannotBeAltered:
    description: A products state cannot be altered using the PATCH operation
    remediation: 'Check the API documentation for the /activeProducts, /inactiveProducts, /removedProducts, /lockedProducts, and /unlockedProducts endpoints'
  productNameInUse:
    description: 'The given product name is currently in use, and cannot be reused'
    remediation: 'Delete the product with the specified name, or use a different name'
  productCodeInUse:
    description: 'The given product code is currently in use, and cannot be reused'
    remediation: 'Delete the product with the specified code, or use a different code'
  activateProductSubTypeInvalidState:
    description: The state of the resource may not be changed to active or inactive when the product type or subtype is still `pending`.
    remediation: Check the state of your product type and subtype and ensure it is not pending
  productTypeDoesNotExist:
    description: The given product type does not exist
    remediation: Verify that the product type exists for the subtype or parent type and resubmit
  deleteProductTypeInvalidState:
    description: 'A product type may not be deleted if the state is anything other than pending, or if the type is used by a pending product'
    remediation: Check the state of the productType and ensure it is not pending. Also ensure that any products using the productType are not pending
  removeProductTypeInvalidState:
    description: A product type may not be updated if the state is removed.
    remediation: Check the state of the productType and ensure it not removed.
  updateProductTypeInvalidState:
    description: A product type may not be removed if the state is anything other than inactive.
    remediation: Check the state of the productType and ensure it is inactive.
  cannotChangeRemovedProductTypeState:
    description: The state of a removed productType may not be changed
    remediation: Check the state of the productType and ensure it is not removed
  cannotUpdateProductTypeState:
    description: The state of a productType cannot be changed using a PUT method
    remediation: 'Check the API documentation for the /activeProductTypes, /inactiveProductTypes, and /removedProductTypes endpoints'
  invalidQueryParameterCombination:
    description: Do not use mutually exclusive query parameters.
    remediation: 'Use one or the other, but not both'
    attributes:
      properties:
        type: object
        mutuallyExclusiveQueryParameters:
          type: array
          minLength: 2
          items:
            type: string
          example:
            - state
            - openable
x-apiture-traits:
  - api:
      title: Products
      basePath: products
      links:
        - getApiDoc
        - getApi
        - getLabels
        - getProductTypes
        - createProductType
        - getProducts
        - createProduct
  - resource:
      name: product
  - resource:
      name: product type
x-apiture-annotated-at: '2020-05-28T16:36:31.703Z'
host: api.devbank.apiture.com
