openapi: 3.1.0
info:
  version: 4.3.0
  title: Trigg Integrations API
  contact:
    email: hello@triggloyalty.com
    url: https://triggloyalty.com/
  x-logo:
    url: https://oc-oip-api-v4-msc.azurewebsites.net/trigg-logo.svg
  description: >
    This is the documentation for the current release of the Trigg Integrations
    API.


    Current release: 2025-03-03 (v.4.3.0) 

    {% admonition type="info" name="Moved documentation" %} You are now viewing
    our new and improved API documentation.  </p> If you were redirected here
    from <a href="https://dev.oip.oculos.no">https://dev.oip.oculos.no</a>,
    please update your bookmarks to this new URL.  {% /admonition %}

    # Overview

    Welcome to the Trigg Integrations API documentation, a resource for better
    understanding of our integration platform. 


    This documentation is designed to be accessible and informative for both
    technical and sales professionals, ensuring that you can fully explore the
    capabilities and benefits of our API.


    For technical experts, this documentation provides in-depth insights into
    the API endpoints, data structures, and integration possibilities. You'll
    find detailed explanations, code examples, and best practices to help you
    integrate our API into your applications and systems.


    For sales persons and other non-technical stakeholders, this documentation
    offers a overview of the API's features, use cases, and potential business
    advantages. 



    As the configuration of Trigg allows for a flexible request/reponse, only
    the standard data structures are displayed in this documentation.


    If you have a customized configuration and need examples, please contact our
    support team or your sales person.



    The API has two base URL's, one for production and one for testing.


    <b>Production:</b> <a
    href="https://api.oculos.no/v4">https://api.oculos.no/v4</a>


    <b>Staging:</b> <a
    href="https://api.staging.oculos.no/v4">https://api.staging.oculos.no/v4</a>


    We are excited to announce that our API now has a sandbox environment
    available!  This allows you to test and integrate our features in a safe and
    controlled setting. 



    To get your sandbox key, please contact us at <a
    href="mailto:hello@triggloyalty.com">hello@triggloyalty.com</a>.

    # Authentication

    Our API is designed to be secure and efficient, and it requires an API key
    to authenticate your requests. In this short documentation, we'll guide you
    on how to use our API with the x-api-key header to ensure successful
    integration.


    <h3>Step 1: Obtain Your API Key</h3>

    Before you can start using our API, you'll need to obtain an API key. This
    key acts as your access pass and is typically provided to you by your
    contact person. If you haven't received your API key, please reach out to
    our support team or your sales person.

    <h3>Step 2: Include the x-api-key Header</h3>

    To make authenticated requests to our API, you must include the API key in
    the header of your HTTP requests. Specifically, you should add the
    "x-api-key" header with your API key as its value. 
      
      `x-api-key : <API KEY>`

    <h3>Step 3 [OPTIONAL]: White list your IP address(es) for your production
    environment </h3>

    Although this step is optional, we strongly encourage you to send us an list
    of your IP addresses that are in use in your production environment.



    This lets us configure Trigg to only allow access to your API account from
    those IP's.


    # Error Messages

    The Trigg API returns a standarized detailed error message where it's
    possible. The structure of the error message looks like this:

      ```
      {
        "code" : "409",
        "message" : "Conflict",
        "detailedErrorMessage" : {

        }
      }
      ```

      The `detailedErrorMessage` is fully dynamic and can contain a simple string aswell as a list of errors'. 

    # Terms Of Use

    By accessing or using our API (the "Service"), you agree to comply with
    these Terms of Use. Please read them carefully, as they govern your usage of
    our API.


    <h3>API Usage</h3>


    You are granted a non-exclusive, non-transferable, limited license to access
    and use our API in accordance with these terms. You may only use the API for
    its intended purpose and in compliance with our guidelines and
    documentation.


    <h3>API Key</h3>


    Access to the API requires an API key. Keep your API key secure and do not
    share it with unauthorized parties. You are responsible for all actions
    performed using your API key. Ensure that the API key is not visible in any
    way in your application.


    <h3>Prohibited Actions</h3>


    You may not use the API to engage in any illegal, harmful, or abusive
    activities. You may not decompile, reverse engineer, or attempt to gain
    unauthorized access to the API or our systems. You may not use the API in a
    way that could harm or interfere with our services, infrastructure, or other
    users.


    <h3>Data Privacy</h3>


    When using our API, you may have access to user data. Ensure you handle such
    data in compliance with applicable data protection laws and our privacy
    policy.



    By using our API, you acknowledge that you have read, understood, and agreed
    to these Terms of Use. Failure to comply with these terms may result in the
    suspension or termination of your API access. 

    <h3>Functionality in preview</h3>

    Methods marked with Preview in this API documentation are subject to
    change. 


    These methods are provided for early access to new features but may have
    limited support, and their behavior, parameters, or responses can be
    modified or deprecated without prior notice. 


    Use these methods with caution in production environments, as changes may
    impact integration stability. 

    It is recommended to regularly check the documentation for updates when
    utilizing preview features.



    We reserve the right to update these terms, so it is recommended to review
    them periodically for any changes.

    # Troubleshooting & Tips

    Coming soon

    # Rate Limits

    Trigg API does not have any rate limits, but some external systems
    integrated with Trigg may have. 


    Exceeding these limits may result in temporary access restrictions.


    We strongly recommend implementing a back-off strategy to handle rate limit
    exceeded responses. This strategy helps you avoid overloading our/external
    servers and ensures a smoother user experience.



    If you are receving one of the following errors it's an indication of an
    issue with an external system.

      ```
      {
        "code" : "429",
        "message" : "Too Many Requests",
        "detailedErrorMessage" : {
        }
      }
      ```

      ```
      {
        "code" : "502",
        "message" : "Bad Gateway",
        "detailedErrorMessage" : {
          "gateway" : "Connection to backend system failed. System: [system_name]",
          "gatewayMessage" : "Detailed error message here"
        }
      }
      ```


    # Tutorials

    Coming soon.

    # Webhooks

    A webhook is a way for two different software applications to communicate
    with each other in real-time. 

    It's like a notification system that triggers actions automatically when
    certain events occur.    


    Oculos can configure webhooks on request, please contact our support team
    for more information.

    # Change Log

    <h3>March 2025</h3>

    <h4>2025-03-03</h4>


    * Added support for multi branding. This means that you can now run multiple
    brands on one account. 

    * Added 422 quarantine status for the create customers method. This status
    is used when a customer is quarantined for a period of time.

    * Enable/disable promotions endpoints are now out of preview.

    * The property 'promotionDefinitionId' is now available on the promotion
    object. This property contains the id of the promotion definition that the
    promotion is based on.

    * New endpoint for listing all promotion definitions. [PREVIEW]
    (https://dev.triggloyalty.com/openapi/promotions/getpromotionsdefinitions)

    * New endpoint for listing of all active promotions thare are available to
    customers. [PREVIEW]
    (https://dev.triggloyalty.com/openapi/promotions/getpromotionscampaigns)

    * Added a module endpoint. This endpoint collects minor endpoints that are
    not directly related to the main endpoints.


    Available modules:

      * /modules/vehicles - endpoint for fetching and adding vehicles [PREVIEW] (https://dev.triggloyalty.com/openapi/modules/getvehiclesbycustomeridd)


    <h3>November 2024</h3>

    <h4>2024-11-19</h4>


    * Added endpoints for enabling/disabling of promotions (in preview)

    * Added endpoint for transfering clips on loyalty cards between two existing
    customers (in preview)

    * Minor bugfixes

    * Minor bugfixes in documentation


    <h3>June 2024</h3>

    <h4>2024-06-18</h4>


    * Added endpoint for deleting a customer by external id

    * Minor bugfixes in documentation


    <h3>May 2024</h3>

    <h4>2024-05-22</h4>
      
    * Added an endpoint for returning all transactions resulting in a bonus
    reward (https://dev.triggloyalty.com/openapi/loyalty/getbonustransactions)

    * Added a list of promotions on the customer object when applicable. Please
    note that this list only will contain active promotions.

    * Added information to the documentation on how to mark a transaction as a
    return (https://dev.triggloyalty.com/openapi/transactions/addtransactions)

    * Minor bugfixes

    * Improved performance


    <h4>2024-05-14</h4>

    Added new methods


    * Get customer by externalId

    * Update customer by externalId

    * Minor bugfixes

    * Improved performance 



    <h3>April 2024</h3>

    <h4>2024-04-17</h4>

    Introduced dynamic methods on the customers and promotions endpoints

    <h3>March 2024</h3>

    <h4>2024-03-19</h4>

    Release of v4
tags:
  - name: Affiliates
    description: >
      Endpoints for managing affiliates. 


      The affiliate endpoints currenly allows you to retrieve information about
      affiliates.
  - name: Abandoned carts
    description: >
      Endpoints for managing abandoned carts


      An abandoned cart function helps businesses track when online shoppers add
      items to their virtual shopping carts but leave the website or app without
      completing their purchase. 


      It captures data about these abandoned carts, including the specific
      products left behind and, when available, the customer's contact
      information.
  - name: Customers
    description: >
      The customers endpoint allows you to create, update or search for
      customers through various parameters depending on your configuration.


      Depending on your configuration, the API may take or return additional
      fields in the extendedProperties object. 


      To get an example of your specific integration, please contact our support
      team.
  - name: Consents
    description: >
      Endpoint that lists all available consents for a client.


      Depending on your configuration, the API may take or return additional
      fields in the extendedProperties object. 


      To get an example of your specific integration, please contact our support
      team.        
  - name: Data Enrichment
    description: |
      Endpoint that lets you enrich member data .      
  - name: Health
    description: >
      Endpoint for checking the Trigg API health status.


      With these endpoint(s) you can make a request to Trigg to get a quick
      system status.
  - name: Import
    description: >
      Endpoint that provides methods for importing data, typically in batches
      into Trigg.


      In this endpoint we can receive many formats and types, such as JSON and
      XML requests. 


      To get an example of your specific integration, please contact our support
      team.
  - name: Loyalty
    description: >
      Endpoints for manually managing different types of loyalty objects.


      Methods under this endpoint lets you view current campaigns, manually add
      bonus points, get balance of a customers loyalty card(s) etc.


      Depending on your configuration, the API may take or return additional
      fields in the extendedProperties object. 


      To get an example of your specific integration, please contact our support
      team.
  - name: Messaging
    description: >
      Endpoint that lets yoy send different types of messages and manually
      trigger automations that send SMS.


      In this endpoint you will also find a complete set of methods to create a
      2F verfication solution by SMS.
  - name: Modules
    description: >
      Endpoints for managing minor features that are not directly related to the
      main endpoints.


      Available modules:


      * Wishlist - Endpoints for managing wishlists

      * Vehicles - Endpoints for managing vehicles [PREVIEW]
  - name: Payment Cards
    description: TODO
  - name: Plugins
    description: TODO
  - name: Promotions
    description: >
      This API provides various methods for managing promotions. 


      Clients can retrieve available promotions id or phone number, redeem
      promotions, and view redeemed ones. 
  - name: Reports
    description: >
      Endpoint that provides method(s) for returning various types of reports.
      Reports could be either of standard type or could be individually
      configured for clients. 


      Examples of reports:

      * New customers last 24 hours

      * Deleted customers last 24 hours

      * Bonus transactions made by customer

      * +++


      Some reports that have a high volume response, may return the result in
      pages. This requires the client to iterate through each page to fetch the
      entire result.


      In reports with paging functionality, a metaData object will contain
      paging information:


      ```

      {
        "metaData": {
            "reportType": "customers",
            "totalRecords": 12,
            "totalPages": 1,
            "activePage": 1
          }  
      }

      ```



      * `totalRecords` = Number of records available through all pages

      * `totalPages` = How many pages available containing data

      * `activePage` = Which page the client is on


      To control wich page to fetch data from and how many records that should
      be return on each page use querystring parameters.


      * `page` = from wich page should the dataset be fetched from (default = 1)

      * `rowsPage` = how many results per page that should be returned (default
      = 25)


      Please contact us for further information on your possiblites.
  - name: Stores
    description: Endpoint for Stores
  - name: Transactions
    description: Endpoint for transactions
  - name: Triggers
    description: >
      Endpoints that enables triggering automations through the API.


      Automations is a feature that simplifies and speeds up repetitive tasks.
      It helps marketers send emails, post on social media, and manage customer
      data more efficiently
  - name: Vipps
    description: Endpoint for Vipps integration
servers:
  - url: https://api.oculos.no/v4
    description: Production
  - url: https://api.staging.oculos.no/v4
    description: Staging
paths:
  /affiliates:
    get:
      tags:
        - Affiliates
      summary: Get affiliates [PREVIEW]
      description: Returns a list of all available affiliates
      operationId: getAffiliates
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffiliatesResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /abandonedCarts:
    post:
      tags:
        - Abandoned carts
      summary: Create or update a cart
      description: >
        Creates or updates a cart. 


        As with many other endpoints, the payload is configurable and can
        contain additional data in the `extendedProperties` field.


        To update a cart, use the same cartId as an existing cart.
      operationId: createCart
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CartRequest'
    put:
      tags:
        - Abandoned carts
      summary: Empty cart
      description: Method that allows the client to empty a stored cart
      operationId: emptyCart
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmptyCartRequest'
  /plugins/cart/price:
    post:
      tags:
        - Plugins
      summary: Calculate new price on cart
      description: >
        Endpoint used for calculating a new price on a cart based on current
        campaigns and/or a members available: 


        * Bonus

        * Coupons

        * Vouchers


        As both the request and response is fully dynamic, the format of the
        data exchanged has to be agreed upon before activating.
      operationId: cartsCalculatePrice
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmptyCartRequest'
  /dataenrichment/forms/{clientName}/{id}:
    get:
      tags:
        - Data Enrichment
      summary: Enrich and redirect member
      description: >
        This endpoints automatically enriches a member by thats already stored
        in the MA-system. 


        The endpoints fetches the member from the MA-system, enriches it's data,
        updates and redirects back to a pre-configured URL.
      operationId: enrichmentFromSchema
      parameters:
        - name: clientName
          in: path
          description: Client identifier, provided by Oculos.
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Id of member
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '302':
          description: >-
            Found - the member is found and enriched, redirecting to
            pre-configured URL.
        '400':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Member not found
  /triggers/{id}/customer/{customerId}:
    post:
      tags:
        - Triggers
      summary: Trigger automation by member id
      description: >
        Methods available to trigger automations. 


        The automation that should be triggered also has to be configured in the
        marketing automation system.


        As the payload can vary between triggers, the request is fully dynamic
        and should be posted as dictionary with key/value. 
      operationId: triggerAutomationByMemberId
      parameters:
        - name: id
          in: path
          description: id of trigger
          required: true
          schema:
            type: string
        - name: customerId
          in: path
          description: The members id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Trigger not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: string
                  example: test data
  /triggers/{id}/customer/mobilePhone/{mobilePhone}:
    post:
      tags:
        - Triggers
      summary: Trigger automation by mobile phone number
      description: >
        Methods available to trigger automations by a configurable
        identificator, for example mobile phone.
          
        The automation that should be triggered also has to be configured in the
        marketing automation system.


        As the payload can vary between triggers, the request is fully dynamic
        and should be posted as dictionary with key/value.   
      operationId: triggerAutomationByMobilePhone
      parameters:
        - name: id
          in: path
          description: Id of trigger
          required: true
          schema:
            type: string
        - name: mobilePhone
          in: path
          description: Members mobile phone number
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Trigger not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: string
                  example: test data
  /loyalty/bonus/campaigns/{id}:
    get:
      tags:
        - Loyalty
      summary: Return all bonus campaigns
      description: >
        Methods that returns all current bonus campaigns. 


        The id parameters is optional and can be used to return

        all campaigns for a specific member.


        The return object is dynamic and can vary between clients, the example
        below shows the most common types of fields.
      operationId: getBonusCampaigns
      parameters:
        - name: id
          in: path
          description: Id of member
          required: false
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetBonusCampaignsResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Member not found
  /loyalty/bonus/import:
    post:
      tags:
        - Loyalty
      summary: Import activity bonus
      description: >
        Method that allows a third-party to manually import activities and
        update bonus amount for a member. 


        Available activites that qualifies for bounus points can be found using
        the `/bonus/rules` endpoint.


        The request and response can be customer specific and the example below
        shows only a common type of request body.
      operationId: bonusImport
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BonusImportResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer or activity not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BonusImportRequest'
  /loyalty/bonus/addRewardPoints:
    post:
      tags:
        - Loyalty
      summary: Add bonus points
      description: |
        Method that allows you to manually add points to specific member
      operationId: bonusAddRewardPoints
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BonusImportRequest'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddRewardPointsRequest'
  /loyalty/activity/{activityId}/customerId/{customerId}:
    post:
      tags:
        - Loyalty
      summary: Add bonus by activity id
      description: >
        This method allows you to add bonus points to a specific customer based
        on activity.


        The activityId is the identifier of the activity that the customer has
        performed.

        The customerId is the identifier of the customer that has performed the
        activity.

        The request body is fully dynamic and can contain any number of
        properties depending on configuration. 


        The request sample is only an minimum required example and may have to
        be replaced with the actual request body if the configuration requires
        it.
      operationId: addBonusPointsByActivity
      security:
        - api_key: []
      responses:
        '200':
          description: Success
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoyaltyActivityRequest'
  /loyalty/loyalty-cards/transfer-clips:
    post:
      tags:
        - Loyalty
      summary: Transfer clips [PREVIEW]
      description: >
        A method that allows the client to transfer clips on a loyalty card
        between two existing customers.


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object.
      operationId: transferClips
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/transferClipsRequest'
  /bonus/rules:
    get:
      tags:
        - Loyalty
      summary: Return all bonus rules
      description: >
        Methods that returns all the rules and activitys that qualifies to
        bonuses.
      operationId: getBonusRules
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BonusRulesResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage
  /consents:
    get:
      tags:
        - Consents
      summary: Get consents
      description: Returns a list of all available consents
      operationId: getConsents
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetConsentsReponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
  /promotions/customerId/{customerId}:
    get:
      tags:
        - Promotions
      summary: Get promotions
      description: |
        Returns a list of all available promotions for a member.
      operationId: getCouponsByMemberId
      parameters:
        - name: customerId
          in: path
          description: >
            Id of member. 


            The type of id parameter is configurable where the most common types
            are id, mobile phone or an external id. 
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PromotionResponse'
        '400':
          description: Bad Request
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found - no coupons available
  /promotions/mobilePhone:
    get:
      tags:
        - Promotions
      summary: Get promotions by phone number
      description: >
        Returns a list of all available promotions for a member by using the
        mobile phone number
      operationId: getCouponsByMobilePhone
      parameters:
        - name: mobilePhone
          in: query
          description: >
            Customers mobile phone number


            The type of id parameter is configurable where the most common types
            are id, mobile phone or an external id. 
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PromotionResponse'
        '400':
          description: Bad Request
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found - no coupons available
  /promotions/redeem:
    post:
      tags:
        - Promotions
      summary: Redeem promotion
      description: |
        Method that redeems a promotion for a customer. 
      operationId: redeemPromotion
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found - promotion was not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeemPromotionRequest'
  /promotions/redeem/history/customerId/{customerId}:
    get:
      tags:
        - Promotions
      summary: Get Redeemed Promotions
      description: |
        Method that returns a list of redeemed promotions for a customer. 

        Example of usage; ??
      operationId: getCouponHistory
      parameters:
        - name: customerId
          in: path
          description: Id of customer
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found - coupon was not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CouponHistoryResponse'
  /promotions/cart:
    post:
      tags:
        - Promotions
      summary: Get promotions by cart
      description: |
        Return promotions based on shopping cart
      operationId: postPromotionCart
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DynamicResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Function Not Found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromotionsByCartRequest'
  /promotions/campaigns:
    get:
      tags:
        - Promotions
      summary: Get campaigns
      description: |
        This method allows the client to get a list of all active promotions.
      operationId: getPromotionsCampaigns
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromotionCampaignResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found
  /promotions/definitions:
    get:
      tags:
        - Promotions
      summary: Get definitions [PREVIEW]
      description: |
        This method allows the client to list all promotion definitions
      operationId: getPromotionsDefinitions
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromotionDefintionsResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found
  /promotions/dynamic/{function}:
    post:
      tags:
        - Promotions
      summary: Dynamic method
      description: >
        This method is fully dynamic both in request/response and is available
        for specific client customizations on the promotions endpoint.
      operationId: postPromotionDynamic
      parameters:
        - name: function
          in: path
          description: Your custom function name provided by Oculos
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DynamicResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Function Not Found
  /promotions/{promotionId}/enableUse/{customerId}:
    post:
      tags:
        - Promotions
      summary: Enable promotion use
      description: >
        This method allows a specific promotion to be used (redeemed) by a
        specific customer again, if it previously has been disabled using the 
        ```disableUse ``` method.


        As default, promotions are set to available/enabled for use when
        assigned to a customer.
      operationId: enableCustomerPromotionUse
      parameters:
        - name: promotionId
          in: path
          description: Promotion identifier. (id property found on promotion object).
          required: true
          schema:
            type: string
        - name: customerId
          in: path
          description: Customer identifier (id property on customer).
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage.
  /promotions/{promotionId}/disableUse/{customerId}:
    post:
      tags:
        - Promotions
      summary: Disable promotion use
      description: >
        Disable the possiblity for a specific promotion to be used (redeemed) by
        a specific customer.
      operationId: disableCustomerPromotionUse
      parameters:
        - name: promotionId
          in: path
          description: Promotion identifier. (id property found on promotion object).
          required: true
          schema:
            type: string
        - name: customerId
          in: path
          description: Customer identifier (id property on customer).
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage.
  /health/ping:
    get:
      tags:
        - Health
      summary: Ping
      description: |
        Ping OIP with a 200 GET request to check system status. 

        This endpoint does not require authentication.
      operationId: oipHealthPing
      security: []
      responses:
        '200':
          description: Success
        '404':
          description: Not Found
  /import:
    post:
      tags:
        - Import
      summary: Import
      description: >
        Imports data into OIP by the body request, this method accepts various
        formats such as JSON, XML, CSV etc. 


        This method may have to be configured by Oculos before usage and the
        examples below is just an illustration of payload as the endpoint is
        fully dynamic.
      operationId: import_data
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenericImportRequest'
  /import/form:
    post:
      tags:
        - Import
      summary: Form import
      description: >
        Imports data into OIP from a form using the
        `application/x-www-form-urlencoded` content type.


        The endpoint may have to be configured by Oculos before usage.
      operationId: import_form
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /import/file:
    post:
      tags:
        - Import
      summary: File import
      description: >
        Imports a file into OIP.


        Use multipart/form-data with a required field file (the file to upload).


        Curl example:


        ```curl -X POST "http://api.oculos.no/v4/import/file" -F
        "file=@path/to/your/file.txt"```


        This endpoint may have to be configured by Oculos before usage.
      operationId: import_file
      security:
        - api_key: []
      responses:
        '202':
          description: Accepted
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /customers:
    get:
      tags:
        - Customers
      summary: Get customer by mobile phone
      description: >
        This method allows the client to search for a customer by a mobile phone
        number.


        Example: `+4712345678`


        The response sample below shows the default response, but depending on
        your configuration the API may return additional fields in the
        extendedProperties object.
      operationId: getCustomerByMobilePhone
      parameters:
        - name: mobilePhone
          in: query
          description: The customers mobile phone number
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Customer Not Found
        '422':
          description: Unprocessable Entity
    post:
      tags:
        - Customers
      summary: Create customer
      description: >
        The request sample(s) below shows the default payload and one minimum
        required payload. 


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object. For specific examples reach out
        to your technical contact.
      operationId: createMember
      security:
        - api_key: []
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CustomerRequest'
                - $ref: '#/components/schemas/MinimalCustomerRequest'
    put:
      tags:
        - Customers
      summary: Update customer
      description: >
        The request sample(s) below shows the default payload and one minimum
        required payload. 


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object. For specific examples reach out
        to your technical contact.
      operationId: updateMember
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CustomerUpdateRequest'
                - $ref: '#/components/schemas/MinimalCustomerUpdateRequest'
  /customers/externalId:
    put:
      tags:
        - Customers
      summary: Update customer by external id
      description: >
        The request sample(s) below shows the default payload and one minimum
        required payload. 


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object. For specific examples reach out
        to your technical contact.
      operationId: updateCustomerByExternalId
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CustomerUpdateRequest'
                - $ref: >-
                    #/components/schemas/MinimalCustomerUpdateRequestByExternalId
  /customers/id/{id}:
    get:
      tags:
        - Customers
      summary: Get customer by id
      description: >
        This method allows the client to search for a customer by a unique id


        Example: `226B14AF-18A6-44CF-834E-BE4BCA5D64B7`


        The response sample below shows the default response, but depending on
        your configuration the API may return additional fields in the
        extendedProperties object.
      operationId: getCustomerById
      parameters:
        - name: id
          in: path
          description: The customers id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Customer Not Found
  /customers/externalId/{id}:
    get:
      tags:
        - Customers
      summary: Get customer by external id
      description: >
        This method allows the client to search for a customer by an external Id


        Example: `B9012E40-1B08-4DC5-84F9-BB8E2653B2A6`


        The response sample below shows the default response, but depending on
        your configuration the API may return additional fields in the
        extendedProperties object.
      operationId: getCustomerByExternalId
      parameters:
        - name: id
          in: path
          description: The customers external id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Customer Not Found
  /customers/changed/{timestamp}:
    get:
      tags:
        - Customers
      summary: Get changed customers
      description: >-
        Returns a list of changed customers since given timestamp. Default
        (empty parameter) is since last day.
      operationId: getChangedCustomersList
      parameters:
        - name: timestamp
          in: path
          description: Timestamp in format (TODO)
          example: 20240101T2210
          required: false
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CustomerRequest'
                - $ref: '#/components/schemas/MinimalCustomerRequest'
  /customers/id/{id}/source/{source}:
    delete:
      tags:
        - Customers
      summary: Delete customer
      description: Method that let's you delete a customer by Id
      operationId: deleteMember
      parameters:
        - name: id
          in: path
          description: Id of member
          required: true
          schema:
            type: string
        - name: source
          in: path
          description: |
            Description of origin for the request. 

            Example values: ECOM, POS, MyPage etc.
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Member Not Found
  /customers/externalId/{externalId}/source/{source}:
    delete:
      tags:
        - Customers
      summary: Delete customer by external id
      description: Method that let's you delete a customer by an external id
      operationId: deleteMemberByExternalId
      parameters:
        - name: externalId
          in: path
          description: External id of member
          required: true
          schema:
            type: string
        - name: source
          in: path
          description: |
            Description of origin for the request. 

            Example values: ECOM, POS, MyPage etc.
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Member Not Found
  /customers/email/{email}:
    get:
      tags:
        - Customers
      summary: Get customer by email [PREVIEW]
      description: >
        This method allows the client to search for a customer by email address


        `Note: Special characters such as '+'' must be encoded. Example: +=%2B`


        The response sample below shows the default response, but depending on
        your configuration the API may return additional fields in the
        extendedProperties object.
      operationId: getCustomerByEmail
      parameters:
        - name: email
          in: path
          description: The customers email address
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer Not Found
  /customers/prospects:
    post:
      tags:
        - Customers
      summary: Create prospect [PREVIEW ]
      description: >
        This endpoint creates a new customer prospect record in the system. It
        accepts either email or mobilePhone in the request body and returns the
        created customer id upon success.         


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object. For specific examples reach out
        to your technical contact.
      operationId: createProspect
      security:
        - api_key: []
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerProspectResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProspectRequest'
  /customers/dynamic/{function}:
    post:
      tags:
        - Customers
      summary: Dynamic method
      description: >
        This method is fully dynamic both in request/response and is available
        for specific client customizations on the customer endpoint.
      operationId: postCustomerDynamic
      parameters:
        - name: function
          in: path
          description: Your custom function name provided by Oculos
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DynamicResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Function Not Found
  /data-enrichment/mobilePhone/{mobilePhone}:
    get:
      tags:
        - Data Enrichment
      summary: Discover member by phone number
      description: >-
        Looks up a mobile phone number and tries to discover owner data through
        3rd party services.
      operationId: discoverMemberByPhone
      parameters:
        - name: mobilePhone
          in: path
          description: Phone number to lookup
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoverMemberResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /data-enrichment/ssn/{ssn}:
    get:
      tags:
        - Data Enrichment
      summary: Discover member by social security number (SSN)
      description: >-
        This method let's you retreive information on a member based on their
        SSN
      operationId: discoverMemberBySSN
      parameters:
        - name: ssn
          in: path
          description: SSN number to lookup
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoverMemberResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /payment-cards:
    post:
      tags:
        - Payment Cards
      summary: Attach payment card token to member
      description: |
        Use this endpoint for adding a card token to an existing member. 

        This method requires an integration with a payment provider.
      operationId: addPaymentCard
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberAddCardRequest'
  /payment-cards/token/{token}:
    get:
      tags:
        - Payment Cards
      summary: Get member by payment card token
      description: |
        Retrives a member by card token

        This method requires an integration with a payment provider.
      operationId: getPaymentCards
      parameters:
        - name: token
          in: path
          description: Card token
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage
  /payment-cards/customerId/{customerId}:
    get:
      tags:
        - Payment Cards
      summary: Get all payment cards by customerId
      description: >
        Method that returns a list of all payment cards attached to a member. If
        there are no cards attached to the member, an empty list will be
        returned.


        This method requires an integration with a payment provider.
      operationId: getPaymentCardsByMemberId
      parameters:
        - name: customerId
          in: path
          description: Id of member
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberCardListResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage
  /payment-cards/{customerId}/{cardId}:
    delete:
      tags:
        - Payment Cards
      summary: Delete payment card
      description: Method used for deleting card attached to member
      operationId: deleteCard
      parameters:
        - name: customerId
          in: path
          description: Id of member
          required: true
          schema:
            type: string
        - name: cardId
          in: path
          description: Id of card
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos before usage'
  /payment-cards/signature:
    post:
      tags:
        - Payment Cards
      summary: Create payment card signature
      description: >
        Method used to create a payload that can be used to trigger a new card
        registration process. 


        This metod requires addional services, please contact your advisor for
        more information.
      operationId: createVerifoneSignature
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignatureRequest'
  /messaging/sms:
    post:
      tags:
        - Messaging
      summary: Send SMS
      description: Sends an SMS with a given sender name.
      operationId: sendSmsMessage
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessagingSendSmsRequest'
  /messaging/sms/code/create/{phoneNumber}:
    get:
      tags:
        - Messaging
      summary: Create Code
      description: >
        Creates and sends an SMS with a unique code that can be used in 2 factor
        logins or customer verification processes.


        The sender, length and expiration time is configurable.
      operationId: createSmsCode
      parameters:
        - name: phoneNumber
          in: path
          description: Receivers mobile phone number. Must contain country code
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /messaging/sms/code/verify/{phoneNumber}/{code}:
    get:
      tags:
        - Messaging
      summary: Verify code
      description: Verifies the SMS code recevied in the Create Code endpoint.
      operationId: verifySmsCode
      parameters:
        - name: phoneNumber
          in: path
          description: Mobile phone number to verify. Must contain country code prefix.
          example: '+4712345678'
          required: true
          schema:
            type: string
        - name: code
          in: path
          description: The verification code received from the create code endpoint.
          example: '123456'
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /messaging/sms/trigger/{customerId}/{id}:
    get:
      tags:
        - Messaging
      summary: Trigger sms
      description: >-
        Triggers the send out of a pre-defined message. This message has to be
        configured by Oculos in advance.
      operationId: triggerSmsAutomation
      parameters:
        - name: customerId
          in: path
          description: >-
            Member identifier, depending on your OIP configuration this can
            typically be a internal guid, mobile phone or other external id.
          example: 50EF2EA3-E804-404E-B65B-73AB6B9D7F05
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Id of message to trigger
          example: welcomeSMS
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
  /modules/vehicles/customerId/{customerId}:
    get:
      tags:
        - Modules
      summary: Get vehicles [PREVIEW]
      description: >
        This method allows the client to search for vehicles by a customer id


        Example: `B9012E40-1B08-4DC5-84F9-BB8E2653B2A6`


        The response sample below shows the default response, but depending on
        your configuration the API may return additional fields in the
        extendedProperties object.
      operationId: getVehiclesByCustomerId
      parameters:
        - name: customerId
          in: path
          description: The customer id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VehicleResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer Not Found
    post:
      tags:
        - Modules
      summary: Add vehicle [PREVIEW]
      description: |
        This method allows the client to add a new vehicle for a customer
      operationId: addVehicle
      parameters:
        - name: customerId
          in: path
          description: The customer id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer Not Found
        '409':
          description: Conflict - the vehicle already exists
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostVehicleRequest'
  /modules/vehicles/vehicleId/{vehicleId}:
    put:
      tags:
        - Modules
      summary: Update vehicle [PREVIEW]
      description: |
        This method allows the client to update a vehicle
      operationId: updateVehicle
      parameters:
        - name: vehicleId
          in: path
          description: The vehicle id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer Not Found
        '409':
          description: Conflict - the vehicle already exists
        '422':
          description: >-
            Unprocessable Entity - Not self registered. This vehicle can not be
            updated by the client
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutVehicleRequest'
    delete:
      tags:
        - Modules
      summary: Delete vehicle [PREVIEW]
      description: |
        This method allows the client to delete a vehicle
      operationId: deleteVehicle
      parameters:
        - name: vehicleId
          in: path
          description: The vehicle id
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Deleted
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Customer Not Found
        '409':
          description: Conflict - the vehicle already exists
        '422':
          description: >-
            Unprocessable Entity - Not self registered. This vehicle can not be
            deleted by the client
  /plugins/pos/extenda:
    post:
      tags:
        - Plugins
      summary: Extenda Plugin endpoint
      description: >
        Endpoint used for calculating a new price on a cart based on current
        campaigns and/or a members available: 


        * Bonus

        * Coupons

        * Vouchers


        As both the request and response is fully dynamic, the format of the
        data exchanged has to be agreed upon before activating.
      operationId: extendaPluginGetCoupons
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmptyCartRequest'
  /reports/{reportType}:
    get:
      tags:
        - Reports
      summary: Get reports
      description: >
        Method that returns different types of reports based on input parameters
        and/or querys.

        Input parameters and/or querys are fully dynamic and can vary between
        clients. 


        For a complete list of parameters and example of response in your
        implemenation, please contact our support team.
      operationId: report1
      parameters:
        - name: reportType
          in: path
          description: |
            Type (id) of report that should be returned
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /loyalty/loyalty-cards/{customerId}:
    get:
      tags:
        - Loyalty
      summary: Get loyalty cards
      description: >
        Endpoint that returns a list of active loyalty/stamp cards for a
        customer.
      operationId: stampcard1
      parameters:
        - name: customerId
          in: path
          description: |
            Id of customer.
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetStampcardResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Not Found
  /loyalty/achievements:
    put:
      tags:
        - Loyalty
      summary: Update achievement [PREVIEW]
      description: >
        A method that allows the client to manually add clips/stamps to a
        customers achievement card which can be useful i scenarions where live
        updates are not possible.


        Depending on your configuration, the API may take or return additional
        fields in the extendedProperties object.
      operationId: updateAchivement
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AchivementUpdateRequest'
  /loyalty/loyalty-cards/campaigns:
    get:
      tags:
        - Loyalty
      summary: Get loyalty card campaigns
      description: >
        Endpoint that return all products that qualifies for a count in each
        loyalty/stamp card.


        Depending on your OIP configuration, the API may return additional
        fields in the extendedProperties object.
      operationId: stampcardCampaigns
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StampcardCampaignsResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /loyalty/transactions/customerId/{customerId}:
    post:
      tags:
        - Loyalty
      summary: Add bonus by activity id
      description: >
        This method allows you to add bonus points to a specific customer based
        on activity.


        The activityId is the identifier of the activity that the customer has
        performed.

        The customerId is the identifier of the customer that has performed the
        activity.

        The request body is fully dynamic and can contain any number of
        properties depending on configuration. 


        The request sample is only an minimum required example and may have to
        be replaced with the actual request body if the configuration requires
        it.
      operationId: addBonusPointsByActivity
      parameters:
        - name: activityId
          in: path
          description: The identifier of the activity
          required: true
          schema:
            type: string
        - name: customerId
          in: path
          description: The identifier of the customer
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: Success
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoyaltyActivityRequest'
  /stores:
    get:
      tags:
        - Stores
      summary: Get Stores
      description: >
        Endpoint for getting all client stores, both physical and online. 


        Default properties are id and name. 


        Depending on the clients data, there may be additional data available
        under the extendedProperties object.
      operationId: store1
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StoreResponse'
        '400':
          description: Unauthorized
  /transactions/customerId/{customerId}:
    get:
      tags:
        - Transactions
      summary: Get Transactions
      description: |
        Returns all transactions for a member.
      operationId: getTransactions
      parameters:
        - name: customerId
          in: path
          description: >
            Member identifier, depending on configuration one of the following
            identifers could be in use:
              * Mobile phone
              * Unique id (oipId or externalSystemId)
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '404':
          description: Member Not Found
  /transactions:
    post:
      tags:
        - Transactions
      summary: Create transaction
      description: >

        Endpoint used for inserting transactions into OIP. 


        It is recommended to send in a list/batch of transactions instead of
        sending multiple single transactions.

        The maximum recommended items per batch is around 400
        transactions/items.


        {% admonition type="info" name="Returns" %}

        To make a transaction be processed as a return, you have to do the
        following:
          * Set the transactionType field on item level to 'RETURN'
          * Set the quantity value to a negative value.

        {% /admonition %}

          Example of transaction flagged as a return:
          ```
          {
          "ReceiptRequests": [
            {
              "Header": {
                "StoreId": "001",
                "ReceiptId": "9999258836",
                "TimeStamp": "2023-10-13T14:50:05",
                "ConsumerId": "9ae37ad3-8a55-4bb5-81fd-b08f00b684ed",
                "GrossAmount": 1817.8,
                "Vat": 363.56
              },
              "Items": [
                {
                  "ReceiptId": "Id of receipt",
                  "LineNo": 1,
                  "Quantity": -1,
                  "ProductId": "VR1722775",
                  "ProductName": "MINI CHRISTMAS TREE WITH LED LIGHTS",
                  "GrossAmount": 1817.8,
                  "Vat": 363.56,
                  "NetAmount": 1454.24,
                  "TransactionType": "RETURN"
                }
              ]
            }
          ]
        }

        ```
      operationId: addTransactions
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CustomTransactionRequest'
                - $ref: '#/components/schemas/MinimumTransactionRequest'
  /vipps/codeword/{phone}:
    get:
      tags:
        - Vipps
      summary: Trigger recruitment by SMS
      description: Starts the recruitment process from a code word
      operationId: vippsRecruitByCodeWord
      parameters:
        - name: phone
          in: path
          description: Customers mobile phone, only norwegian number without country code.
          example: '91234567'
          required: true
          schema:
            type: string
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
  /vipps:
    post:
      tags:
        - Vipps
      summary: Trigger recruitment from POS
      description: >
        This method allows POS to trigger the Vipps recruitment process and OIP
        to collect store recruitment statistics.            
      operationId: vippsRecruitFromPos
      security:
        - api_key: []
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: >-
            Forbidden - this method requires activation and configuration from
            Oculos
        '409':
          description: Conflict
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VippsTriggerByPosRequest'
components:
  securitySchemes:
    main_auth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: http://example.com/api/oauth/dialog
          scopes:
            read:users: read users info
            write:users: modify or remove users
    api_key:
      type: apiKey
      in: header
      name: x-api-key
  schemas:
    AffiliatesResponse:
      type: array
      items:
        type: object
        properties:
          id:
            type: string
            example: 154831A5-7E2E-44D8-8F2B-FB0D33CAD941
          name:
            type: string
            example: Sample Affiliate
          description:
            type: string
            example: Affiliate agreement for Sample Affiliate
          active:
            type: boolean
            example: true
          store:
            type: string
            nullable: true
            example: null
          storeId:
            type: string
            nullable: true
            example: null
          contractType:
            type: string
            example: Central
          contractTypeId:
            type: integer
            example: 2
          partnerType:
            type: string
            example: eCom
          partnerTypeId:
            type: integer
            example: 2
          organizationNo:
            type: string
            example: '0'
          validFrom:
            type: string
            format: date-time
            example: '2025-05-01T00:00:00'
          validTo:
            type: string
            format: date-time
            example: '2029-12-28T00:00:00'
          contactFirstName:
            type: string
            example: John
          contactLastName:
            type: string
            example: Doe
          contactEmail:
            type: string
            example: sample-affiliate@test.com
          contactPhone:
            type: string
            nullable: true
            example: null
          internalContact:
            type: string
            example: John Doe
          extendedProperties:
            type: object
            additionalProperties: true
            example: {}
    EmptyCartRequest:
      type: object
      properties:
        cartId:
          type: string
          description: Cart identifier
          example: 934E2183-5004-45B0-8E75-A5178F1DEEF1
    CartRequest:
      type: object
      required:
        - cartId
        - contactId
      properties:
        cartId:
          type: string
          example: 934E2183-5004-45B0-8E75-A5178F1DEEF1
          description: Unique identifier of cart
        cartUrl:
          type: string
          description: URL to customers cart
          example: http://mywebshop.com/cart/934E2183-5004-45B0-8E75-A5178F1DEEF1
        contactId:
          type: string
          description: Customer identifer
          example: F68438A9-800B-457D-81D5-952FCEB63D8C
        externalId:
          type: string
          description: External customer identifer
          example: '100001111'
        extendedProperties:
          type: object
          description: Additional properties depending on configuration
          properties:
            additionalProp1:
              type: string
            additionalProp2:
              type: string
            additionalProp3:
              type: string
        items:
          type: array
          description: List of products/items
          items:
            type: object
            properties:
              itemId:
                type: string
                description: Unique id of item
                example: '1001'
              quantity:
                type: number
                description: Number of items
                example: 2
              productUrl:
                type: string
                description: URL to product
                example: https://mywebshop.com/products/1001
              imageUrl:
                type: string
                description: URL to an image of the product
                example: https://mywebshop.com/products/images/1001
              name:
                type: string
                description: Name of product
                example: Product 1001
              price:
                type: number
                description: TODO
                example: 799.9
              salePrice:
                type: number
                description: TODO
                example: 499.5
              currency:
                type: string
                default: Currency code
                example: NOK
    GetBonusCampaignsResponse:
      type: array
      items:
        properties:
          id:
            type: string
            example: '5'
            description: Id of campaign
          campaignName:
            type: string
            description: Display name of campign
            example: Double bonus on 5 for 300 (covering bark 40 liter)
          campaignType:
            type: string
            description: Campaign type identificator
            example: F
          rewardType:
            type: string
            description: Type of reward. 'double' = double bonus
            example: double
          points:
            type: integer
            description: >-
              Points rewarded by purchasing a product included in this campaign.
              Depending on rewardType, this value is not always set.
            example: null
          campaignImageUrl:
            type: string
            description: URL to an image representing the campaign
            example: https://cdn.oculos.no/images/test.png
          validFrom:
            type: string
            description: The campaign is valid from
            example: '2022-05-29T00:00:00'
          validTo:
            type: string
            description: The campaign is valid to
            example: '2022-06-29T00:00:00'
          products:
            type: array
            description: List of products included in campaign
            items:
              properties:
                id:
                  type: string
                  description: ProductId included in campaign
                  example: AA-123456789
    BonusImportRequest:
      type: object
      properties:
        externalId:
          type: string
          example: '+4712345678'
          description: >-
            The external identifer, most common is the members mobile phone
            number.
        activity:
          type: string
          description: The id of the activity that the customer has performed.
          example: '20'
        activityDate:
          type: string
          description: When whas the activity done.
          example: '2022-07-01'
        activityValue:
          type: integer
          description: How many points is awarded for the activity.
          example: 10
    BonusImportResponse:
      type: array
      items:
        properties:
          status:
            type: string
            example: '1'
            description: Response status code
          statusText:
            type: string
            description: Response status for the bonus import in text
            example: OK
          points:
            type: string
            description: Campaign type identificator
            example: '38'
          totaltPoints:
            type: string
            description: Total bonus amount
            example: '38'
          activityPoints:
            type: string
            description: >-
              Points rewarded by purchasing a product included in this campaign.
              Depending on rewardType, this value is not always set.
            example: '8'
    AddRewardPointsRequest:
      type: object
      required:
        - points
        - description
      properties:
        points:
          type: number
          example: 1000
          description: Number of points to add
        description:
          type: string
          description: Description of points added
          example: Extra bonus points due to delayed shipment
    LoyaltyActivityRequest:
      type: object
      description: An empty payload
      properties: {}
    transferClipsRequest:
      type: object
      required:
        - fromCustomerId
        - toCustomerId
        - loyaltycardId
        - clipCount
      properties:
        fromCustomerId:
          type: string
          example: 15BE85AB-CD61-4A23-8C22-0981AD35DBD1S2010
          description: The id of the customer that gives away the clips.
        toCustomerId:
          type: string
          example: 2A9ACDD0-9113-4EF4-8EA9-FD343E040EE9
          description: >-
            The customer that should receive clips. Target identifier can be
            either id property or mobile phone.
        loyaltycardId:
          type: string
          example: 952841C1-4385-40B3-8B30-A65AAC66108E
          description: From which loyalty card should the clips be transfered from.
        clipCount:
          type: integer
          example: 1
          description: Number of clips to give.
        extendedProperties:
          type: object
          description: Additional properties depending on configuration
          properties:
            additionalProp1:
              type: string
            additionalProp2:
              type: string
            additionalProp3:
              type: string
    BonusRulesResponse:
      type: array
      items:
        properties:
          bonusRuleId:
            type: string
            example: '2'
            description: Id of bonus rule
          name:
            type: string
            description: Name of rule
            example: Registrering
          bonusRuleType:
            type: string
            description: >-
              Type of rule, for example a bonus rule that is triggered by
              customer registration
            example: REGISTER
          value:
            type: string
            description: Value of bonus rule
            example: '30'
          validFrom:
            type: string
            description: Start date for when the rule is active
            example: '2022-01-01T00:00:00'
          validTo:
            type: string
            description: >-
              End date for when the rule is set to inactive. null = no end date
              otherwise same format as validFrom
            example: null
          created:
            type: string
            description: Timestamp for when the rule was created
            example: '2021-01-01T00:00:00'
    GetConsentsReponse:
      type: array
      items:
        properties:
          name:
            type: string
            example: Medlemsvilkår
            description: Display name of consent
          id:
            type: string
            description: Id of consent, use this id when setting consents to true/false
            example: acceptsTerms
          metaData:
            type: object
    PromotionResponse:
      properties:
        id:
          type: string
          example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
          description: Generated unique promotion id
        type:
          type: string
          description: Type of promotion
          example: Promotion
        name:
          type: string
          example: Welcome coupon
          description: Name of promotion
        available:
          type: boolean
          example: true
          description: Boolean that shows the promotions availabilty status
        description:
          type: string
          example: This is a coupon that gives the customer 10% discount on any product
        terms:
          type: string
          example: This promotion is valid for all products in the store
          description: Terms and conditions of the promotion
        urlLink:
          type: string
          example: Link to the promotion
        urlImage:
          type: string
          example: https://cdn.oculos.no/img01.png
          description: Link to promotion image
        validFrom:
          type: string
          example: '2024-04-03T07:38:32.495Z'
        validTo:
          type: string
          example: '2024-04-03T07:38:32.495Z'
        validTimeFrom:
          type: string
          example: '08:00:00'
          description: >-
            Time of day the promotion becomes valid. Note: This is only a
            description field that can be used to display information, the
            actual validity is determined by validFrom and validTo. Default
            value is 00:00:00
        validTimeTo:
          type: string
          example: '20:00:00'
          description: >-
            Time of day the promotion becomes invalid. Note: This is only a
            description field that can be used to display information, the
            actual validity is determined by validFrom and validTo. Default
            value is 00:00:00
        unlimitedRedemption:
          type: boolean
          example: false
          description: Can the promotion be redeemed unlimited times
        redemptionLimit:
          type: integer
          example: 5
          description: How many times can the promotion be redeemed?
        redemptionCount:
          type: integer
          example: 1
          description: How many times has the promotion been redeem until now
        sortOrder:
          type: integer
          example: 1
          description: >-
            Sort order of the promotion. The sort order is defined in the Trigg
            application
        productsIncluded:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                example: 123
                description: Id of product
              type:
                type: string
                example: description
        productsExcluded:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                example: 123
                description: Id of product
              type:
                type: string
                example: description
        storesIncluded:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                example: S-001
                description: Id of product
        affiliate:
          type: object
          description: Affiliate information
          properties:
            id:
              type: string
              example: 154831A5-7E2E-44D8-8F2B-FB0D33CAD941
              description: Id of affiliate
            name:
              type: string
              example: Sample Affiliate
              description: Name of affiliate
        redemptionChannels:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                example: POS
                description: Channel identifier. Can be ECOM, POS or ALL
              valueType:
                type: string
                example: PERCENT
                description: PERCENT, AMOUNT or CODE
              value:
                type: string
                example: 10
                description: The value of the promotion
              message:
                type: string
                example: Only applies to members
                description: Can contain a small message/instruction for coupon usage
        redemptionHistory:
          type: array
          items:
            type: object
            properties:
              storeId:
                type: string
                example: S-1001
                description: Id of product
              receiptId:
                type: string
                example: 120C4CF0-1923-4737-8096-A6E8A89F9574
                description: Unique receiptId
              redeemDateTime:
                type: string
                example: '2024-04-03T07:38:32.495Z'
    RedeemPromotionRequest:
      type: object
      required:
        - id
        - storeId
        - memberId
      properties:
        id:
          type: string
          example: 71E8AC01-152D-4B2E-956A-3656CD3396AE
          description: Unique identifier of promotion
        storeId:
          type: string
          description: Id of store that makes the redeem
          example: STORE-001
        cashRegisterId:
          type: string
          description: Id of cash register in store that makes the redeem
          example: POS-001
        cashierId:
          type: string
          description: Id of casher/employee that makes the redeem
          example: '123'
        customerId:
          type: string
          description: >-
            Id of customer to validate the promotion against. Depending on
            configuration in OIP, this can be a internalId, mobile phone,
            externalId etc.
          example: 3477B4C3-5E2E-4007-9C26-41E60FECB016
        receiptId:
          type: string
          description: >-
            Id of reciept that the promotion i applied to. Should be the same Id
            as the receipt sent to OIP after the purchase.
          example: RECEIPT_001
        extendedProperties:
          type: object
          description: Additional properties depending on configuration
          properties:
            additionalProp1:
              type: string
            additionalProp2:
              type: string
            additionalProp3:
              type: string
    CouponHistoryResponse:
      type: array
      items:
        type: object
        properties:
          couponId:
            type: string
            example: 0D23E714-E09C-457E-8D4D-CC3DCCCC8698
            description: Unique id of coupon
          description:
            type: string
            description: Short description of coupon
            example: 20% member discount
    PromotionsByCartRequest:
      type: object
      required:
        - customerId
        - articles
      properties:
        customerId:
          type: string
          example: 15BE85AB-CD61-4A23-8C22-0981AD35DBD1S2010
          description: customer id
        storeId:
          type: string
          description: Id of store that sends the cart
          example: STORE001
        receiptId:
          type: string
          description: Unique id of receipt
          example: 08580DEE-C3B8-4808-8A9A-1CE9F8096B52
        articles:
          type: array
          items:
            type: object
            description: List of articles in cart
            properties:
              articleId:
                type: string
              price:
                type: number
              quantity:
                type: number
    DynamicResponse:
      type: object
      properties:
        field1:
          type: string
          example: This is a string
        field2:
          type: number
          example: 123
        field3:
          type: string
          example: Another string
    PromotionCampaignResponse:
      type: array
      description: List of promotion campaigns
      items:
        type: object
        properties:
          id:
            type: string
            example: 5A623177-9E15-4568-AC7F-851D36DB70A1
            description: Id of the promotion campaign
          name:
            type: string
            example: Velkomstkupong 10%
            description: Name of the promotion campaign
          description:
            type: string
            example: Velkomstkupong 10%
            description: Description of the promotion campaign
          redemptionChannel:
            type: string
            example: ALL
            description: Redemption channel of the promotion campaign
          type:
            type: string
            example: Promotion
            description: Type of the promotion campaign
          imageUrl:
            type: string
            example: null
            description: Image URL of the promotion campaign
          linkUrl:
            type: string
            example: null
            description: Link URL of the promotion campaign
          validFrom:
            type: string
            format: date-time
            example: '2025-03-01T00:00:00'
            description: Start date and time of the promotion campaign
          validTo:
            type: string
            format: date-time
            example: null
            description: End date and time of the promotion campaign
    PromotionDefintionsResponse:
      type: object
      properties:
        id:
          type: string
          example: 8F96A471-05F4-4A9B-8156-97BD35F6F29D
        active:
          type: boolean
          example: true
        name:
          type: string
          example: Voucher kr 100,-
        description:
          type: string
          example: >-
            This is your welcome offer. Use it to get a discount on your next
            purchase.
        linkUrl:
          type: string
          example: https://cdn.oculos.no/8F96A471-05F4-4A9B-8156-97BD35F6F29D
        imageUrl:
          type: string
          example: https://cdn.oculos.no/8F96A471-05F4-4A9B-8156-97BD35F6F29D.png
        type:
          type: string
          example: Promotion
        subType:
          type: string
          example: null
        validFrom:
          type: string
          format: date-time
          example: '2025-03-01T00:00:00'
        validTo:
          type: string
          format: date-time
          example: null
        redemptionLimit:
          type: integer
          example: 1
        unlimitedRedemption:
          type: boolean
          example: false
        redemptionChannels:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                example: eCom
              valueType:
                type: string
                example: amount
              value:
                type: string
                example: '100'
              message:
                type: string
                example: ''
        productsIncluded:
          type: array
          items:
            type: string
          example: []
        productsExcluded:
          type: array
          items:
            type: string
          example: []
        storesIncluded:
          type: array
          items:
            type: string
          example: []
        tiersIncluded:
          type: array
          items:
            type: string
          example: []
        clientId:
          type: string
          example: null
        created:
          type: string
          format: date-time
          example: '2025-03-06T13:11:25.233'
        createdBy:
          type: string
          example: no-reply@oculos.no
        updated:
          type: string
          format: date-time
          example: '2025-03-06T13:11:25.233'
        updatedBy:
          type: string
          example: no-reply@oculos.no
    GenericImportRequest:
      type: object
      properties:
        members:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                example: John Doe
              age:
                type: integer
                example: 30
              email:
                type: string
                example: john.doe@example.com
              address:
                type: string
                example: Street 1
              city:
                type: string
                example: Oslo
              zip:
                type: string
                example: 10
              metaData:
                type: array
                items:
                  type: object
                  properties:
                    isVip:
                      type: boolean
                      example: true
    GetStampcardResponse:
      type: array
      description: List of a customers stamp cards
      items:
        type: object
        properties:
          id:
            type: integer
            example: '4'
            description: Id of stamp card.
          namn:
            type: string
            example: Black coffee
            description: Name of stamp card
          total:
            type: number
            example: 6
            description: Total number of clips/stamps needed
          count:
            type: number
            example: 3
            description: Current clip/stamp count
          imageUrl:
            type: string
            example: cdn.oculos.no/coffee_clip3.png
            description: Image for stamp card. Requires additional setup.
          sortOrder:
            type: integer
            example: 1
            description: >-
              Sort order of the promotion. The sort order is defined in the
              Trigg application
          extendedProperties:
            type: object
            description: Additional properties depending on configuration
            properties:
              additionalProp1:
                type: object
              additionalProp2:
                type: object
              additionalProp3:
                type: object
    LoyaltyResponse:
      properties:
        points:
          type: number
          example: 500
          description: >
            Current point balance on customer. This property also contains
            points that may be pending. 


            The property ```pointsActive``` returns the current available
            balance.
        pointsActive:
          type: number
          description: Totalt points active
          example: 300
        pointsPending:
          type: number
          example: 200
          description: >-
            Points that a user has earned but are not yet available for use due
            to pending validation or processing
        pointsExpired:
          type: number
          example: 100
          description: >-
            Number of loyalty points that a user had but have since expired and
            are no longer available for use.
        pointsTotal:
          type: number
          example: 600
          description: Total points earned through history
        loyaltyCards:
          $ref: '#/components/schemas/GetStampcardResponse'
    CustomerResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
              description: Generated unique customer id
            externalId:
              type: string
              description: Secondary/external customer id
            mobilePhone:
              type: string
              example: '+4712345678'
            email:
              type: string
              example: test@test.com
            firstName:
              type: string
            lastName:
              type: string
            address:
              type: string
              example: Kongens gate 21
            zip:
              type: string
              example: 1010
            city:
              type: string
              example: Oslo
            country:
              type: string
              example: 'NO'
              description: Country code in 2 letters ISO 3166 standard
            birthDate:
              type: string
              example: '2007-01-01T00:00:00'
            gender:
              type: string
              example: Female
              description: >-
                Default valid values are Female, Male or Unknown. Can be
                customized.
            favoriteStores:
              type: array
              items:
                type: string
                example: S100
            interests:
              type: array
              items:
                type: string
                example: Sports
            loyalty:
              type: object
              $ref: '#/components/schemas/LoyaltyResponse'
            promotions:
              type: array
              items:
                $ref: '#/components/schemas/PromotionResponse'
            consents:
              type: object
              properties:
                acceptsTerms:
                  type: boolean
                acceptsEmail:
                  type: boolean
                acceptsSms:
                  type: boolean
                extendedConsents:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      value:
                        type: boolean
                      name:
                        type: string
                      description:
                        type: string
                      consentDate:
                        type: string
            extendedProperties:
              type: object
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
        metaData:
          type: object
          properties:
            CreatedAt:
              type: string
              example: '2023-01-01 15:15:00'
            UpdatedAt:
              type: string
              example: '2023-01-05 15:15:00'
    CustomerUpdateRequest:
      type: object
      properties:
        data:
          type: object
          required:
            - id
          properties:
            id:
              type: string
              example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
            mobilePhone:
              type: string
              example: '+4712345678'
              description: Contacts mobile phone
            externalId:
              type: string
              description: Secondary/external member id
            email:
              type: string
              example: test@test.com
            firstName:
              type: string
            lastName:
              type: string
            address:
              type: string
              example: Kongens gate 21
            zip:
              type: string
              example: 1010
            city:
              type: string
              example: Oslo
            country:
              type: string
              example: 'NO'
              description: Country code in 2 letters ISO 3166 standard
            birthDate:
              type: string
              example: '2007-01-01T00:00:00'
            gender:
              type: string
              example: Female
              description: >-
                Default valid values are Female, Male or Unknown. Can be
                customized.
            favouriteStores:
              type: array
              items:
                type: string
                example: S100
            interests:
              type: array
              items:
                type: string
                example: Sports
            consents:
              type: object
              properties:
                acceptsTerms:
                  type: boolean
                acceptsEmail:
                  type: boolean
                acceptsSms:
                  type: boolean
                extendedConsents:
                  type: array
                  description: Additional consents depending on configuration
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        example: acceptsDigital
                      value:
                        type: boolean
                        example: true
            extendedProperties:
              type: object
              description: Additional properties depending on configuration
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
        source:
          type: object
          required:
            - storeId
            - sourceName
          properties:
            storeId:
              type: string
              example: S2010
              description: Specifies from which store the request is from
            cashRegisterId:
              type: string
              example: POS-123
              description: Specifies from which cash register the request is from
            cashierId:
              type: string
              example: ID-321
              description: Specifies from which cashier the request is from
            sourceName:
              type: string
            extendedSourceFields:
              type: object
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
    MinimalCustomerUpdateRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
        source:
          type: object
          properties:
            storeId:
              type: string
            sourceName:
              type: string
    CustomerRequest:
      type: object
      properties:
        data:
          type: object
          required:
            - mobilePhone
          properties:
            mobilePhone:
              type: string
              example: '+4712345678'
              description: Customers mobile phone
            externalId:
              type: string
              description: Secondary/external customer id
            email:
              type: string
              example: test@test.com
            firstName:
              type: string
            lastName:
              type: string
            address:
              type: string
              example: Kongens gate 21
            zip:
              type: string
              example: 1010
            city:
              type: string
              example: Oslo
            country:
              type: string
              example: 'NO'
              description: Country code in 2 letters ISO 3166 standard
            birthDate:
              type: string
              example: '2007-01-01T00:00:00'
            gender:
              type: string
              example: Female
              description: >-
                Default valid values are Female, Male or Unknown. Can be
                customized.
            favoriteStores:
              type: array
              items:
                type: string
                example: S100
            interests:
              type: array
              items:
                type: string
                example: Sports
            consents:
              type: object
              properties:
                acceptsTerms:
                  type: boolean
                acceptsEmail:
                  type: boolean
                acceptsSms:
                  type: boolean
                extendedConsents:
                  type: array
                  description: Additional consents depending on configuration
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        example: acceptsDigital
                      value:
                        type: boolean
                        example: true
            extendedProperties:
              type: object
              description: Additional properties depending on configuration
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
        source:
          type: object
          required:
            - storeId
            - sourceName
          properties:
            storeId:
              type: string
              example: S2010
              description: Specifies from which store the request is from
            cashRegisterId:
              type: string
              example: POS-123
              description: Specifies from which cash register the request is from
            cashierId:
              type: string
              example: ID-321
              description: Specifies from which cashier the request is from
            sourceName:
              type: string
            extendedSourceFields:
              type: object
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
    MinimalCustomerRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            mobilePhone:
              type: string
              example: '+4712345678'
        source:
          type: object
          required:
            - storeId
            - sourceName
          properties:
            storeId:
              type: string
              example: S2010
              description: Specifies from which store the request is from
            sourceName:
              type: string
            extendedSourceFields:
              type: object
              properties:
                additionalProp1:
                  type: string
                additionalProp2:
                  type: string
                additionalProp3:
                  type: string
    MinimalCustomerUpdateRequestByExternalId:
      type: object
      properties:
        data:
          type: object
          properties:
            externalId:
              type: string
              example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
        source:
          type: object
          properties:
            storeId:
              type: string
            sourceName:
              type: string
    CreateProspectRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            email:
              type: string
              example: test@example.com
            mobilePhone:
              type: string
              example: '+47121212'
        source:
          type: object
          properties:
            name:
              type: string
              example: Newsletter
            storeId:
              type: string
              example: ST-001
    CustomerProspectResponse:
      type: object
      properties:
        externalId:
          type: string
          format: uuid
          description: The external identifier for the customer prospect.
      required:
        - externalId
    DiscoverMemberResponse:
      type: object
      properties:
        firstName:
          type: string
          example: firstName
        lastName:
          type: string
          example: lastName
        address:
          type: string
          example: Kongens gate 20
        zip:
          type: string
          example: '0010'
        city:
          type: string
          example: Oslo
        gender:
          type: string
          example: Male
        birthDate:
          type: string
          example: '1955-12-16T00:00:00'
        extendedProperties:
          type: object
          properties:
            additionalProp1:
              type: string
            additionalProp2:
              type: string
            additionalProp3:
              type: string
    MemberAddCardRequest:
      type: object
      required:
        - memberId
        - token
      properties:
        memberId:
          type: string
          example: 15BE85AB-CD61-4A23-8C22-0981AD35DBD1S2010
          description: The members Id
        token:
          type: string
          description: Card token to add to members list of payment cards
          example: 2A9ACDD0-9113-4EF4-8EA9-FD343E040EE9
    MemberCardListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            properties:
              id:
                type: string
                example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
                description: Generated unique member id
              cardId:
                type: string
                example: 223b6c7f-0961-4efb-9a99-6e20f00a7897
                description: ''
              token:
                type: string
                example: '999999999999999999'
                description: ''
              cardName:
                type: string
                example: Visa
                description: >-
                  Type of card. Depending on source of registration, this value
                  can be empty
              cardData:
                type: string
                example: 05/2025
                description: >-
                  Expiration date. Depending on source of registration, this
                  value can be empty
              maskedCardNo:
                type: string
                example: ''
                description: >-
                  Masked card number. Depending on source of registration, this
                  value can be empty
              displayCardName:
                type: string
                example: DNB Visa
                description: Card name given by customer
              displayCardData:
                type: string
                example: 05/2025
                description: Expiration date given by customer
        metaData:
          type: object
          properties:
            CreatedAt:
              type: string
              example: '2023-01-01 15:15:00'
            UpdatedAt:
              type: string
              example: '2023-01-05 15:15:00'
    SignatureRequest:
      type: object
      required:
        - source
        - provider
        - memberId
      properties:
        source:
          type: string
          example: ECOM
          description: String that identifies the client by name that makes the request
        provider:
          type: string
          description: Which provider should be used (default is Verifone)
          example: Verifone
        data:
          type: object
          required:
            - firstName
            - lastName
            - email
            - mobilePhone
          properties:
            firstName:
              type: string
              example: John
            lastName:
              type: string
              example: Doe
            email:
              type: string
              example: test@test.com
            mobilePhone:
              type: string
              example: '+4712345678'
    MessagingSendSmsRequest:
      type: object
      properties:
        phoneNumber:
          type: string
          example: '+4712345678'
          description: The receivers phone number. Must contain country code prefix.
        message:
          type: string
          example: This is a text message
          description: The message you want to send
        sender:
          type: string
          example: Oculos
          description: The name of sender
    VehicleResponse:
      type: array
      description: List of customers vehicles
      items:
        type: object
        properties:
          id:
            type: string
            example: B4B8DB75-517F-464F-8E0A-E30E969BDA8B
            description: Id of vehicle
          registrationNumber:
            type: string
            example: AB12345
            description: Registration number of the vehicle
          vin:
            type: string
            example: TMBJC9NY3MF017111
            description: Vehicle Identification Number
          vehicleGroup:
            type: string
            example: PERSONBIL
            description: Group of the vehicle
          brand:
            type: string
            example: SKODA
            description: Brand of the vehicle
          lastInspectionDate:
            type: string
            format: date
            example: '2023-04-29'
            description: Date of the last inspection
          nextInspectionDate:
            type: string
            format: date
            example: '2025-04-29'
            description: Date of the next inspection
          lastOdometerStand:
            type: number
            example: null
            description: Last recorded odometer stand
          lastRegistrationDate:
            type: string
            format: date
            example: '2024-03-27'
            description: Date of the last registration
          firstRegistrationDate:
            type: string
            format: date
            example: '2021-04-29'
            description: Date of the first registration
          extendedProperties:
            type: object
            description: Additional properties depending on configuration
            properties:
              additionalProp1:
                type: object
              additionalProp2:
                type: object
              additionalProp3:
                type: object
    PostVehicleRequest:
      type: object
      properties:
        registrationNumber:
          type: string
          maxLength: 10
          description: The registration number of the vehicle.
        vin:
          type: string
          maxLength: 20
          description: The Vehicle Identification Number (VIN).
        modelYear:
          type: integer
          format: int32
          description: The model year of the vehicle.
        brandCode:
          type: integer
          format: int32
          description: The code representing the brand of the vehicle.
        brandName:
          type: string
          maxLength: 30
          description: The name of the brand.
        modelName:
          type: string
          maxLength: 30
          description: The name of the model.
        lastRegistrationDate:
          type: string
          maxLength: 30
          description: The date of the last registration.
        nextInspectionDate:
          type: string
          maxLength: 30
          description: The date of the next inspection.
        fuelCode:
          type: integer
          format: int32
          description: The code representing the fuel type.
        fuelName:
          type: string
          maxLength: 30
          description: The name of the fuel type.
        colorCode:
          type: integer
          format: int32
          description: The code representing the color of the vehicle.
        colorName:
          type: string
          maxLength: 30
          description: The name of the color.
        dealerId:
          type: string
          maxLength: 30
          description: The ID of the dealer.
        extendedProperties:
          type: object
          additionalProperties: true
          description: A dictionary of extended properties.
      required:
        - registrationNumber
    PutVehicleRequest:
      type: object
      required:
        - registrationNumber
      properties:
        registrationNumber:
          type: string
          maxLength: 10
          description: The registration number of the vehicle.
        vin:
          type: string
          description: The Vehicle Identification Number (VIN).
        brand:
          type: string
          description: The brand of the vehicle.
        extendedProperties:
          type: object
          additionalProperties: true
          description: A dictionary of extended properties.
    AchivementUpdateRequest:
      type: object
      required:
        - id
        - customerId
        - storeId
      properties:
        id:
          type: string
          description: The id of the loyalty card.
          example: 2457B03E-9925-45E9-B551-25F10D7BD4F2
        customerId:
          type: string
          example: D2CC3001-AE10-4FD2-85DD-E4F4CEAD3714
          description: |
            The customers unique id. 
        storeId:
          type: string
          example: STORE-001
          description: The store id
        adjustmentAmount:
          type: integer
          example: 1
          description: >
            Number of clips/stamps to add to the customers loyalty card. 


            Default value are 1, but can be set higher or to a negative value to
            remove clips/stamps.
        extendedProperties:
          type: object
          description: Additional properties depending on configuration
          properties:
            additionalProp1:
              type: object
            additionalProp2:
              type: object
            additionalProp3:
              type: object
    StampcardCampaignsResponse:
      type: array
      description: List of products / line items
      items:
        type: object
        properties:
          stampCardId:
            type: string
            example: '4'
            description: Id of stamp card.
          stampCard:
            type: string
            example: Black coffee
            description: Name of stamp card
          stampCardType:
            type: string
            example: Coffee
            description: Type/category of stamp card
          productId:
            type: string
            example: '7049987090935'
            description: Product id that qualifies for a clip/stamp
          extendedProperties:
            type: object
            description: Additional properties depending on configuration
            properties:
              additionalProp1:
                type: object
              additionalProp2:
                type: object
              additionalProp3:
                type: object
    StoreResponse:
      type: array
      items:
        properties:
          id:
            type: string
            example: STORE-001
            description: StoreId
          name:
            type: string
            description: Our main store
          extendedProperties:
            type: object
            properties:
              externalId:
                type: string
                example: '10001'
              address:
                type: string
                example: Kongens gate 21
              zip:
                type: string
                example: '0153'
              city:
                type: string
                example: Oslo
    TransactionResponse:
      type: array
      items:
        properties:
          receiptId:
            type: string
            example: '122014'
            description: Unique id of receipt/transaction
          receiptDate:
            type: string
            example: '2023-10-03T19:00:53'
            description: Date of purchase
          storeId:
            type: string
            example: '332'
            description: Id of store
          storeName:
            type: string
            example: Our main store
            description: Name of store
          grossAmount:
            type: number
            example: 979.3
            description: Total amount of transaction
          vat:
            type: number
            example: 195.86
            description: Total VAT amount of transaction
          netAmount:
            type: number
            example: 783.44
            description: Totalt amount of transction without VAT
          discount:
            type: number
            example: 0
            description: Totalt discount given on transaction
          rows:
            type: array
            description: List of products / line items
            items:
              type: object
              properties:
                lineNo:
                  type: string
                  example: '1'
                  description: Items line number in transaction
                productId:
                  type: string
                  example: '7049987090935'
                  description: Product id
                productName:
                  type: string
                  example: Black jacket
                  description: Name of product
                productGroupLevel1Name:
                  type: string
                  example: Clothes
                  description: Upper level product category
                productGroupLevel2Name:
                  type: string
                  example: Jackets
                  description: Second level product category
                quantity:
                  type: number
                  example: 1
                  description: Number of products purchased
                grossAmount:
                  type: number
                  example: 979.3
                  description: Totalt amount of line
                vat:
                  type: number
                  example: 195.86
                  description: Totalt amount of VAT of line
                netAmount:
                  type: number
                  example: 783.44
                  description: Totalt amount of line without VAT
                discount:
                  type: number
                  example: 0
                  description: Totalt amount of discount given on line
                points:
                  type: number
                  example: 98
                  description: >-
                    TNumber of points earned on this line item. 0 if no points
                    are earned. Requires that earning of bonus points are
                    enabled in Trigg application.
                transactionType:
                  type: string
                  example: PURCHASE
                  description: Indicates which type of transaction. PURCHASE or RETURN
    CustomTransactionRequest:
      type: object
      properties:
        ReceiptRequests:
          type: array
          items:
            type: object
            properties:
              Header:
                type: object
                properties:
                  StoreId:
                    type: string
                    example: '001'
                    description: Id of store where the transaction was made
                  EcrId:
                    type: string
                    example: '1'
                    default: Id of cash register where the transaction was made
                  ReceiptId:
                    type: string
                    example: '9999258836'
                    description: Id of the reciept
                  TimeStamp:
                    type: string
                    example: '2023-10-13T14:50:05'
                    description: Timestamp of the transaction in UTC time format
                  ConsumerId:
                    type: string
                    example: 9ae37ad3-8a55-4bb5-81fd-b08f00b684ed
                    description: >-
                      Depending on configuration, this could be a unique id or
                      the customers phone number.
                  GrossAmount:
                    type: number
                    example: 1817.8
                    description: The total amount of the transaction
                  Vat:
                    type: number
                    example: 363.56
                    description: The totalt VAT amount of the transaction
                  NetAmount:
                    type: number
                    example: 1454.24
                    description: The total amount of the transaction without VAT
                  Discount:
                    type: number
                    example: 0
                    default: The total amount of discount given on the transaction
                  Currency:
                    type: number
                    example: NOK
                    description: >-
                      The currency used. Use currency code as described in
                      https://www.iban.com/currency-codes
                  PaymentString:
                    type: string
                    example: Any type of string
                    description: >-
                      Can contain a string with payment data sent from POS. Max
                      length 4000 chars
                  Ext1:
                    type: string
                    example: ''
                    description: Extra field available for customizations
                  Ext2:
                    type: string
                    example: ''
                    description: Extra field available for customizations
                  Ext3:
                    type: string
                    example: ''
                    description: Extra field available for customizations
                  Ext4:
                    type: string
                    example: ''
                    description: Extra field available for customizations
                  Ext5:
                    type: string
                    example: ''
                    description: Extra field available for customizations
              Items:
                type: array
                items:
                  type: object
                  properties:
                    ReceiptId:
                      type: string
                      example: Id of receipt
                    LineNo:
                      type: string
                      example: 1
                      description: Line number in transaction for item(s)
                    Quantity:
                      type: number
                      example: 1
                      description: Number of products purchased
                    ProductGroupLevel1Id:
                      type: string
                      example: 45
                      description: Id of top level product category
                    ProductGroupLevel1Name:
                      type: string
                      example: CHRISTMAS
                      description: Name of top level product category
                    ProductGroupLevel2Id:
                      type: string
                      example: 4545
                      description: Id of second level product category where available
                    ProductGroupLevel2Name:
                      type: string
                      example: DECORACTIONS
                      description: Name of second level product category where available
                    ProductGroupLevel3Id:
                      type: string
                      example: 454545
                      description: Id of third level product category where available
                    ProductGroupLevel3Name:
                      type: string
                      example: MINI TREES
                      description: Name of third level product category where available
                    ProductId:
                      type: string
                      example: VR1722775
                      description: Id of product
                    ProductName:
                      type: string
                      example: MINI CHRISTMAS TREE WITH LED LIGHTS
                      description: Name of product
                    SupplierId:
                      type: string
                      example: '9000'
                      description: Id of supplier
                    SupplierName:
                      type: string
                      example: The christmas company
                      default: Name of supplier
                    GrossAmount:
                      type: number
                      example: 1817.8
                      description: Total amount of item(s)
                    Vat:
                      type: number
                      example: 363.56
                      description: The total VAT amount of item(s)
                    NetAmount:
                      type: number
                      example: 1454.24
                      description: The totalt amount item(s) without VAT
                    Discount:
                      type: number
                      example: 0
                      description: Totalt discount given on item(s)
                    Cost:
                      type: number
                      example: 0
                      description: The total cost of products where available
                    CampaignId:
                      type: string
                      example: EF5C352A-D8D8-431E-A8D6-22928F405F20
                      description: Reference to campaign where available
                    TransactionType:
                      type: string
                      example: PURCHASE
                      description: Type of transaction (PURCHASE or RETURN)
                    Ext1:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext2:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext3:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext4:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext5:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext6:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext7:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext8:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext9:
                      type: string
                      example: ''
                      description: Extra field available for customizations
                    Ext10:
                      type: string
                      example: ''
                      description: Extra field available for customizations
    MinimumTransactionRequest:
      type: object
      properties:
        ReceiptRequests:
          type: array
          items:
            type: object
            properties:
              Header:
                type: object
                properties:
                  StoreId:
                    type: string
                    example: '001'
                    description: Id of store where the transaction was made
                  ReceiptId:
                    type: string
                    example: '9999258836'
                    description: Id of the reciept
                  TimeStamp:
                    type: string
                    example: '2023-10-13T14:50:05'
                    description: Timestamp of the transaction
                  ConsumerId:
                    type: string
                    example: 9ae37ad3-8a55-4bb5-81fd-b08f00b684ed
                    description: >-
                      Depending on configuration, this could be a unique id or
                      the customers phone number.
                  GrossAmount:
                    type: number
                    example: 1817.8
                    description: The total amount of the transaction
                  Vat:
                    type: number
                    example: 363.56
                    description: The totalt VAT amount of the transaction
              Items:
                type: array
                items:
                  type: object
                  properties:
                    ReceiptId:
                      type: string
                      example: Id of receipt
                    LineNo:
                      type: string
                      example: 1
                      description: Line number in transaction for item(s)
                    Quantity:
                      type: number
                      example: 1
                      description: Number of products purchased
                    ProductId:
                      type: string
                      example: VR1722775
                      description: Id of product
                    ProductName:
                      type: string
                      example: MINI CHRISTMAS THREE WITH LED LIGHTS
                      description: Name of product
                    GrossAmount:
                      type: number
                      example: 1817.8
                      description: Total amount of item(s)
                    Vat:
                      type: number
                      example: 363.56
                      description: The total VAT amount of item(s)
                    NetAmount:
                      type: number
                      example: 1454.24
                      description: The totalt amount item(s) without VAT
                    TransactionType:
                      type: string
                      example: PURCHASE
                      description: Type of transaction (PURCHASE or RETURN)
    VippsTriggerByPosRequest:
      type: object
      properties:
        mobilePhone:
          type: string
          example: '91345678'
        storeId:
          type: string
          example: STORE-001
        sourceName:
          type: string
          example: POS
