openapi: 3.1.0
info:
  title: Platform Encryption
  description: |-
    The Encryption API allows a client to fetch a public encryption key in order to encrypt secret or sensitive (such as personally identifying information) data in request payloads, so that the client does not send such data in clear text in JSON requests.

    For example, consider a request body schema that has two properties `username` and `password` which are each tagged with `x-apiture-encrypt: true`, indicating that they should be encrypted before `POST`ing the data to an API service:
    ```yaml
    required:
      - username
      - password
      - encryptedWith
    properties:
      username:
        description: >-
          A banking customer's login username.
        allOf:
          - $ref: '#/components/schemas/encryptedString'
        x-apiture-encrypt: true
      password:
        description: >-
          A banking customer's login password.
        allOf:
          - $ref: '#/components/schemas/encryptedString'
        x-apiture-encrypt: true
      encryptedWith:
        $ref: '#/components/schemas/encryptedWith'
    ```
    (See an example in the schema [`sampleSensitiveRequestBody`](#schema-sampleSensitiveRequestBody) below.)
    Instead of passing the sensitive data in clear text such as:
    ```json
    {
      "username": "trilby",
      "password": "#juggle-4-sugary-mallets%"
    }
    ```
    the client should encrypt and encode each value when constructing the JSON request object.

    To encrypt sensitive data when building a request body, the client should fetch the public encryption key via ['getPublicEncryptionKey'](#op-getPublicEncryptionKey) to obtain a recent (unexpired) [`publicEncryptionKey`](#schema-publicEncryptionKey) object.

    Next, the client should generate an array of random [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) bytes and concatenate the random salt with the clear text data to be encrypted. Salted data helps ensure better encryption of short data strings. The ['getPublicEncryptionKey'](#op-getPublicEncryptionKey) response includes a `saltLength` integer property which is the number of salt bytes to prepend to the clear text.

    The response from `getPublicEncryptionKey` includes an `id` and a `publicKey` for the public encryption key.  The client should use the `publicKey` to encrypt the data. A web client may use [`SubtleCrypto`](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto). **Note** `SubtleCrypto` requires the web client to be running in a secure context, such as a web page at an `https` URL. Non-browser/non-mobile Node.js clients may use the [`crypto`](https://nodejs.org/api/crypto.html) package.

    After encrypting the data, the client should Base64 encode the encrypted byte sequence so that the value can be embedded as an ASCII string in a JSON request object.

    When passing encrypted data, the client also passes a sibling `encryptedWith` property. The `encryptedWith` property is the `id` of the [`publicEncryptionKey`](#schema-publicEncryptionKey) object.

    In the continued example below, let `"username-encrypted-with-public-key"` represent the encrypted and Base64 encoded `username value`, which was encrypted using the public key instance with `id`  value `'B74ae2504D8E'`. Let `"password-encrypted-with-public-key"` represent the encrypted Base64 encoded `password` value which was encrypted using the same public key.

    The client passes the encrypted and Base64 encoded values and a sibling `encryptedWith` string which is the `id` of the public key instances the client used to encrypt the encrypted properties:
    ```json
    {
      "username": "username-encrypted-with-public-key",
      "password": "password-encrypted-with-public-key",
      "encryptedWith": "B74ae2504D8E",
      ]
    }
    ```

    All data in the request should be encrypted with the same public encryption key instance.

    Encryption keys are rotated and expire after a few minutes. A client may cache the public encryption key object obtained by `getPublicEncryptionKey`, but the client should fetch a new key at least 60 seconds before the `publicEncryptionKey.expiresAt` time passes to allow for latency when making and completing an API call with the encrypted data. (Note: the `expiresAt` timestamp is in UTC time zone.)
  version: 0.4.0
  contact:
    name: Apiture
    url: https://developer.apiture.com/help/support/
    email: api@apiture.com
  termsOfService: https://developer.apiture.com/docs/Apiture-API-License-Agreement.pdf
  license:
    name: Apiture API License
    url: https://developer.apiture.com/docs/Apiture-API-License-Agreement.pdf
x-apiture-namespace: platformEncryption
x-apiture-package-name: platform-encryption
servers:
  - url: /platform
tags:
  - name: Encryption
    description: Public key encryption for secret or sensitive data
paths:
  /publicEncryptionKey:
    get:
      summary: Fetch a public encryption key.
      description: |-
        Fetch or create a public encryption key which allows a client to encrypt secret or sensitive data in request payloads.

        This operation may return a recently returned encryption key, or if the service has needs to rotate the key, the operation creates a new key.


        This operation is designed to be called from the following identity types:

          * Banking customer
          * Secure service client
      operationId: getPublicEncryptionKey
      x-apiture-api: platformEncryption
      x-apiture-group: encryption
      x-apiture-identity-types:
        - bankingCustomer
        - serviceClient
      tags:
        - Encryption
      security:
        - clientCredentials:
            - adminData/read
      responses:
        '200':
          description: OK. The response contains the most recent public encryption key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/publicEncryptionKey'
            application/vnd.restful+json:
              schema:
                $ref: '#/components/schemas/publicEncryptionKey'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/admin403'
        '429':
          $ref: '#/components/responses/429'
        4XX:
          $ref: '#/components/responses/4XX'
        5XX:
          $ref: '#/components/responses/5XX'
components:
  schemas:
    publicEncryptionKeyId:
      x-apiture-version: 1.1.0
      title: Public Encryption Key Id (v1.1.0)
      description: The `id` of an [public encryption key](#schema-publicEncryptionKey) instance.
      allOf:
        - $ref: '#/components/schemas/resourceId'
      example: 4c4fe85cf1c819d1ad15
    publicEncryptionKey:
      x-apiture-version: 1.1.0
      title: Public Encryption Key (v1.1.0)
      description: Data necessary to encrypt data with a public encryption key.
      unevaluatedProperties: false
      type: object
      required:
        - id
        - publicKey
        - expiresAt
      properties:
        id:
          description: An `id` for the actual rotating key. Keys rotate every few minutes. The `id` identifies a specific instance of an active public encryption key. This `id` must be passed in the `encryptedWith` metadata (see [`encryptedWith`](#schema-encryptedWith)) when a property in a request is encrypted.
          allOf:
            - $ref: '#/components/schemas/publicEncryptionKeyId'
          example: B74ae2504D8E
        publicKey:
          description: The ASCII encoded public encryption key that the client uses to encrypt data. This is half of the asymmetric public/private key pair. This is often a multi-line string with key bookends and embedded line breaks.
          type: string
          format: text
          minLength: 120
          maxLength: 8092
        expiresAt:
          description: The date-time when the encryption key will expire, in [RFC 3339](https://tools.ietf.org/html/rfc3339) `date-time` format in UTC. If this expiration time has passed or is less than 60 seconds away, the client should [fetch an updated encryption key](#op-getPublicEncryptionKey) before encrypting data or passing data encrypted with the expired key to an operation which accepts encrypted data
          allOf:
            - $ref: '#/components/schemas/readOnlyTimestamp'
          example: '2025-03-09T05:09:16.375Z'
        saltLength:
          description: The number of random [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) bytes that the client should prepend to the beginning of the string data before encrypting it.
          type: integer
          format: int32
          minimum: 64
          maximum: 1024
      example:
        id: B74ae2504D8E
        expiresAt: '2025-03-09T05:09:16.375Z'
        publicKey: '-----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAl2/fCtf69EnMqw6O/6Wh9wFvKW80jjNfXEWbHh0cnWKW1i0Heg0B... -----END RSA PUBLIC KEY-----'
    encryptedWith:
      x-apiture-version: 2.0.0
      title: Encrypted With (v2.0.0)
      description: The `id` of the [public encryption key](#schema-publicEncryptionKey) instance the client used to encrypt the data.
      allOf:
        - $ref: '#/components/schemas/resourceId'
    encryptedString:
      title: Encrypted String (v1.0.0)
      description: A string value that has been encrypted using a public encryption key then Base64 encoded.
      type: string
      minLength: 120
      maxLength: 8096
      contentEncoding: base64
      x-apiture-version: 1.0.0
    sampleSensitiveRequestBody:
      title: Sample Sensitive Request Body (v1.0.0)
      description: A sample request body which contains secret data to be encrypted. The properties `username` and `password` should be encrypted with the public encryption key returned from [`getPublicEncryptionKey`](#op-getPublicEncryptionKey). This request body includes the required `encryptedWith` property which lists the `id` of the encryption key that the client used to encrypt the properties.
      type: object
      required:
        - username
        - password
        - encryptedWith
      properties:
        username:
          description: |-
            A banking customer's login username.

            The value of the `username` property _must_ be encrypted with a recent public encryption key (obtained from the `getPublicEncryptionKey` operation in the Platform Encryption API),  then Base64 encoded.
          allOf:
            - $ref: '#/components/schemas/encryptedString'
          x-apiture-encrypt: true
        password:
          description: |-
            A banking customer's login password.

            The value of the `password` property _must_ be encrypted with a recent public encryption key (obtained from the `getPublicEncryptionKey` operation in the Platform Encryption API),  then Base64 encoded.
          allOf:
            - $ref: '#/components/schemas/encryptedString'
          x-apiture-encrypt: true
        encryptedWith:
          description: The `id` of the public encryption key instance the client used to encrypt the data.
          allOf:
            - $ref: '#/components/schemas/encryptedWith'
      example:
        username: MDEyMzQ1NTQzMjE+PlRoaXMgc2FtcGxlIHZhbHVlIHNob3VsZCBiZSB0aGUgQmFzZTY0IGVuY29k ZWQgdmFsdWUgb2YgdGhlIGVuY3J5cHRlZCB1c2VybmFtZS48PDAxMjM0NTU0MzIxCjAxMjM0NTU0 MzIxPj5UaGlzIHNhbXBsZWQgZGF0YSBpcyBub3QgYWN0dWFsbHkgZW5jcnlwdGVkLCBidXQgY29k ZWQgdG8gbG9vayBsaWtlIGJpbmFyeTw8MDEyMzQ1NTQzMjEKMDEyMzQ1NTQzMjE+PmRhdGEuPDww MTIzNDU1NDMyMQ==
        password: MDEyMzQ1NTQzMjE+PlRoaXMgc2FtcGxlIHZhbHVlIHNob3VsZCBiZSB0aGUgQmFzZTY0IGVuY29k ZWQgdmFsdWUgb2YgdGhlIGVuY3J5cHRlZCBwYXNzd29yZC48PDAxMjM0NTU0MzIxCjAxMjM0NTU0 MzIxPj5UaGlzIHNhbXBsZWQgZGF0YSBpcyBub3QgYWN0dWFsbHkgZW5jcnlwdGVkLCBidXQgY29k ZWQgdG8gbG9vayBsaWtlIGJpbmFyeTw8MDEyMzQ1NTQzMjEKMDEyMzQ1NTQzMjE+PmRhdGEuPDww MTIzNDU1NDMyMQo=
        encryptedWith: B74ae2504D8E
      x-apiture-version: 1.0.0
    resourceId:
      x-apiture-version: 1.0.1
      title: Resource Identifier (v1.0.1)
      description: The unique, opaque system identifier for a resource. This case-sensitive ID is also used as path parameters in URLs or in other properties or parameters that reference a resource by ID rather than URL.
      type: string
      pattern: ^[-_:.~$a-zA-Z0-9]{6,48}$
      minLength: 6
      maxLength: 48
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/resourceId
    readOnlyTimestamp:
      title: Read-Only Timestamp (v1.0.0)
      description: 'A readonly or derived timestamp (an instant in time) formatted in [RFC 3339](https://tools.ietf.org/html/rfc3339) `date-time` UTC format: `YYYY-MM-DDThh:mm:ss.sssZ`.'
      type: string
      minLength: 20
      maxLength: 30
      format: date-time
      readOnly: true
      example: '2021-10-30T19:06:04.250Z'
      x-apiture-since: 0.4.0
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/readOnlyTimestamp
      x-apiture-version: 1.0.0
    problemResponse:
      title: Problem Response (v0.4.2)
      x-apiture-version: 0.4.2
      description: API problem or error response, as per [RFC 9457 application/problem+json](https://tools.ietf.org/html/rfc9457).
      type: object
      allOf:
        - $ref: '#/components/schemas/abstractBody'
        - $ref: '#/components/schemas/apiProblem'
      example:
        id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
        type: https://static.api.apiture.com/errors/noSuchAccount/v1.0.0
        title: Account Not Found
        status: 422
        occurredAt: '2022-04-25T12:42:21.375Z'
        detail: No account exists for the given account reference
        instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/problemResponse
    abstractBody:
      title: Abstract Body (v0.2.0)
      x-apiture-version: 0.2.0
      description: An abstract schema used to define other request and response body model schemas.
      x-apiture-fragment: true
      type: object
      properties: {}
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/abstractBody
    apiProblem:
      x-apiture-version: 1.2.2
      title: API Problem (v1.2.2)
      description: API problem or error, as per [RFC 7807 application/problem+json](https://tools.ietf.org/html/rfc7807).
      type: object
      properties:
        type:
          type: string
          format: uri-reference
          description: |
            A [URI reference (RFC3986)](https://tools.ietf.org/html/rfc3986) that identifies the problem type. If present, this is the URL of human-readable HTML documentation for the problem type. When this member is not present, its value is assumed to be `"about:blank"`.
          example: https://static.api.apiture.com/errors/forbidden/v1.0.0
          maxLength: 2048
        title:
          type: string
          description: |
            A short, human-readable summary of the problem type. The title is usually the same for all problems with the same `type`.
          maxLength: 120
          format: text
          example: User is not authorized to perform the requested action or access the requested resource.
        status:
          type: integer
          format: int32
          description: |
            The [HTTP status code](https://datatracker.ietf.org/doc/html/rfc7231#section-6) for this occurrence of the problem.
          minimum: 100
          maximum: 599
          example: 403
        detail:
          type: string
          description: |
            A human-readable explanation specific to this occurrence of the problem.
          maxLength: 256
          format: text
          example: User is not authorized to perform this operation.
        instance:
          type: string
          format: uri-reference
          description: |
            A URI reference that identifies the specific occurrence of the problem. This is the URI of an API resource that the problem is related to, with a unique error correlation ID URI fragment
          example: https://prduction.api.apiture.com/banking/accounts/ad80fc3e722q5402a#189c13ff-c54c-45f7-b8e0-c88984ba724d
          maxLength: 2048
        id:
          description: The unique identifier for this problem. This is an immutable opaque string.
          $ref: '#/components/schemas/readOnlyResourceId'
        occurredAt:
          description: The timestamp when the problem occurred, in [RFC 3339](https://tools.ietf.org/html/rfc3339) date-time `YYYY-MM-DDThh:mm:ss.sssZ` format, UTC.
          $ref: '#/components/schemas/readOnlyTimestamp'
        problems:
          description: Optional root-causes if there are multiple problems in the request or API call processing.
          type: array
          maxItems: 128
          items:
            $ref: '#/components/schemas/apiProblem'
        attributes:
          type: object
          description: Additional optional attributes related to the problem. This data conforms to the schema associated with the error type.
      example:
        id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
        type: https://static.api.apiture.com/errors/accountNotFound/v1.0.0
        title: Account Not Found
        status: 422
        occurredAt: '2022-04-25T12:42:21.375Z'
        detail: No account exists at the given account_url
        instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/apiProblem
    readOnlyResourceId:
      x-apiture-version: 1.0.1
      title: Read-only Resource Identifier (v1.0.1)
      description: The unique, opaque system-assigned identifier for a resource. This case-sensitive ID is also used in URLs as path parameters or in other properties or parameters that reference a resource by ID rather than URL. Resource IDs are immutable.
      readOnly: true
      allOf:
        - $ref: '#/components/schemas/resourceId'
      x-resolved-from: ../../common/openapi.yaml#/components/schemas/readOnlyResourceId
  securitySchemes:
    clientCredentials:
      type: oauth2
      description: Client Credentials OAuth2 flow that allows a secure service application to access resources. (This access is not used with insecure clients such as web or mobile applications.) See details at [Secure Access](https://dx.apiture.com/docs/api/guides/secure-access/).
      flows:
        clientCredentials:
          tokenUrl: https://dev-oidc.apiture-comm-nonprod.com/oidc/token
          scopes:
            adminData/read: Read access to non-banking data and resources.
  responses:
    '400':
      description: |
        Bad Request. The request body, request headers, and/or query parameters are not well-formed.

        This problem response may have one of the following `type` values:
        * [`https://static.api.apiture.com/errors/badRequest/v1.0.0`](https://static.api.apiture.com/errors/badRequest/v1.0.0)<br>
          The request body and/or parameters was not well-formed.
          Remediation: Correct any syntax or schema errors in the request body or parameters.
      x-apiture-errors:
        - $ref: '#/components/x-apiture-errors/badRequest'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/badRequest/v1.0.0
              title: Bad Request
              status: 400
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: Input did not parse as JSON
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/badRequest/v1.0.0
              title: Bad Request
              status: 400
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: Input did not parse as JSON
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/400
    '401':
      description: |
        Unauthorized. The operation requires authentication but no authentication or insufficient authentication was given.

        This problem response may have one of the following `type` values:
        * [`https://static.api.apiture.com/errors/unauthorized/v1.0.0`](https://static.api.apiture.com/errors/unauthorized/v1.0.0)<br>
          The request lacks valid authentication credentials for the target resource or operation.
          Remediation: Authenticate the user and pass the required authorization with the request.
      x-apiture-errors:
        - $ref: '#/components/x-apiture-errors/unauthorized'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/unauthorized/v1.0.0
              title: Unauthorized
              status: 401
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The request lacks valid authentication credentials
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/unauthorized/v1.0.0
              title: Unauthorized
              status: 401
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The request lacks valid authentication credentials
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/401
    '429':
      description: |
        Too Many Requests. The client has sent too many requests in a given amount of time.

        This problem response may have one of the following `type` values:
        * [`https://static.api.apiture.com/errors/tooManyRequests/v1.0.0`](https://static.api.apiture.com/errors/tooManyRequests/v1.0.0)<br>
          The client has sent too many requests in a given amount of time, exceeding rate limiting.
          Remediation: Slow down the rate of API calls.
      x-apiture-errors:
        - $ref: '#/components/x-apiture-errors/tooManyRequests'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/tooManyRequests/v1.0.0
              title: Too Many Requests
              status: 429
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The user has sent too many requests in a given amount of time.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/tooManyRequests/v1.0.0
              title: Too Many Requests
              status: 429
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The user has sent too many requests in a given amount of time.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/429
    admin403:
      description: Forbidden. The authenticated caller is not authorized to perform the requested operation.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/forbidden/v1.0.0
              title: Forbidden
              status: 403
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The request has valid authentication, but the authenticated agent is forbidden from accessing this resource or operation
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/forbidden/v1.0.0
              title: Forbidden
              status: 403
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The request has valid authentication, but the authenticated agent is forbidden from accessing this resource or operation
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/admin403
    4XX:
      description: Client Request Problem. The client request had a problem not listed under another specific 400-level HTTP response code. View the `detail` in the problem response for additional details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/methodNotAllowed/v1.0.0
              title: Method Not Allowed
              status: 405
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: This HTTP method is not allowed for the given resource URL.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/methodNotAllowed/v1.0.0
              title: Method Not Allowed
              status: 405
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: This HTTP method is not allowed for the given resource URL.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/4XX
    5XX:
      description: Server Problem. The server encountered a problem not listed under another specific 500-level HTTP response code. View the `detail` in the problem response for additional details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/gatewayTimeout/v1.0.0
              title: Insufficient Storage
              status: 507
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The server is unable to store the representation needed to successfully complete the request.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
        application/json:
          schema:
            $ref: '#/components/schemas/problemResponse'
            example:
              id: 3fbad566-be86-4b22-9ba6-3ca99fdc0799
              type: https://static.api.apiture.com/errors/gatewayTimeout/v1.0.0
              title: Insufficient Storage
              status: 507
              occurredAt: '2022-04-25T12:42:21.375Z'
              detail: The server is unable to store the representation needed to successfully complete the request.
              instance: https://static.api.apiture.com/banking/transfers/bb709151-575041fcd617
      x-resolved-from: ../../common/openapi.yaml#/components/responses/5XX
  x-apiture-errors:
    badRequest:
      description: The request body and/or parameters was not well-formed.
      remediation: Correct any syntax or schema errors in the request body or parameters.
      x-resolved-from: ../../common/openapi.yaml#/components/x-apiture-errors/badRequest
    unauthorized:
      description: The request lacks valid authentication credentials for the target resource or operation.
      remediation: Authenticate the user and pass the required authorization with the request.
      x-resolved-from: ../../common/openapi.yaml#/components/x-apiture-errors/unauthorized
    tooManyRequests:
      description: The client has sent too many requests in a given amount of time, exceeding rate limiting.
      remediation: Slow down the rate of API calls.
      x-resolved-from: ../../common/openapi.yaml#/components/x-apiture-errors/tooManyRequests
x-resolved-from: ../../platformEncryption/status-codes-openapi.yaml
x-resolved-at: '2025-06-27T15:05:58.029Z'
x-apiture-annotated-at: '2025-06-27T15:05:58.345Z'
