{
  "properties": {
    "ol": {
      "type": "boolean",
      "examples": [ false ],
      "description": "connectivity status of the device when event was triggered."
    },
    "ts": {
      "type": "string",
      "examples": [ "2022-04-27T08:30:06.239Z" ],
      "description": "timestamp when the event is triggered, RFC 3339 format."
    },
    "block": {
      "type": "string",
      "enum": [ "core", "e-commerce", "e-learning", "loyalty", "payment" ],
      "examples": [ "core" ],
      "description": "content block for the event being logged. default is core."
    }
  },
  "required": [ "ol", "ts", "ctx"],
  "$defs": {
    "d_info": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "23892738971" ],
          "description": "id for the device."
        },
        "brand": {
          "type": "string",
          "examples": [ "samsung" ],
          "description": "brand for the device."
        },
        "model": {
          "type": "string",
          "examples": [ "galaxy" ],
          "description": "model for the device."
        },
        "os": {
          "type": "string",
          "examples": [ "android" ],
          "description": "os for the device."
        },
        "os_ver": {
          "type": "string",
          "examples": [ "21" ],
          "description": "os_ver for the device."
        }
},
      "description": "To log device related events. [Auto Tracked]."
    },
    "app": {
      "type": "object",
      "properties": {
        "action": {
          "type": "string",
          "enum": [ "open", "close", "background", "resume" ],
          "examples": [ "open" ],
          "description": "logs the operation on the app, if app is opened, closed or moved the background."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log App usage related events. [Auto Triggered]."
    },
    "page": {
      "type": "object",
      "properties": {
        "path": {
          "type": "string",
          "examples": [ "ai.causalfoundry.package OR causalfoundry.ai/package" ],
          "description": "the path for page currently being shown to the user."
        },
        "title": {
          "type": "string",
          "examples": [ "HomePage" ],
          "description": "page or class name for the screen currently being shown."
        },
        "duration": {
          "type": "number",
          "examples": [ 3.4 ],
          "description": "the time user spent on the screen in seconds."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log page viewings related events. [Auto Triggered]."
    },
    "identify": {
      "type": "object",
      "properties": {
        "action": {
          "type": "string",
          "enum": [ "register", "login", "logout" ],
          "examples": [ "login" ],
          "description": "identify action being logged."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log user auth related events. signUp, signIn and signOut."
    },
    "search": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "testSearchId" ],
          "description": "special id associated with that search."
        },
        "query": {
          "type": "string",
          "examples": [ "Hello" ],
          "description": "query the user is searching."
        },
        "results_list": {
          "type": "array",
          "description": "list of ids and types for the elements shown in the search results."
        },
        "filter": {
          "type": "object",
          "examples": [ "maxPrice:100" ],
          "description": "hashmap object of filters applied to that search."
        },
        "page": {
          "type": "integer",
          "examples": [ 1 ],
          "description": "page number for search on which user is currently at."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log search related events."
    },
    "media": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "video_testMediaId" ],
          "description": "id associated with that media concatenated with media type."
        },
        "id_source": {
          "type": "string",
          "examples": [ "testMediaId" ],
          "description": "id associated with that media."
        },
        "type": {
          "type": "string",
          "enum": [ "video", "audio", "image" ],
          "examples": [ "video" ],
          "description": "type of media in question."
        },
        "action": {
          "type": "string",
          "enum": [ "impression", "finish", "pause", "play", "seek" ],
          "examples": [ "play" ],
          "description": "actions associated to the media. For image, default is play which refers to app open."
        },
        "time": {
          "type": "number",
          "examples": [ 1354000 ],
          "description": "time in milliseconds for the media when action is performed."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log media related events."
    },
    "rate": {
      "type": "object",
      "properties": {
        "rate_value": {
          "type": "number",
          "examples": [ 4.5 ],
          "description": "rate value for the element, range is 0 to 5 (both inclusive)."
        },
        "type": {
          "type": "string",
          "enum": [ "app", "blood", "drug", "exam", "media", "medical_equipment", "order", "oxygen" ],
          "examples": [ "order" ],
          "description": "type of the element the rate is asked for."
        },
        "subject_id": {
          "type": "string",
          "examples": [ "elementId" ],
          "description": "id of the element being rated."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "to log events related to providing rate experience for the elements in the app."
    },
    "nudge_response": {
      "type": "object",
      "properties": {
        "nudge_id": {
          "type": "integer",
          "examples": [ "nudgeId" ],
          "description": "id associated with that nudge"
        },
        "type": {
          "type": "string",
          "examples": [ "push_notification" ],
          "description": "type of nudge the response is for. Should be same as provided by type in the request nudge API."
        },
        "response": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [ "open", "discard", "block" ],
              "examples": [ "open" ],
              "description": "type of action performed on the push notification"
            }
          },
          "description": "response object containing actions for the nudge shown. This can vary based on the type of the nudge shown to the user."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log user response to nudges i.e. push notifications, in-app messages. [Auto Triggered]."
    },
    "item": {
      "type": "object",
      "properties": {
        "action": {
          "type": "string",
          "enum": [
            "add_favorite",
            "add_reminder",
            "detail",
            "impression",
            "remove_favorite",
            "remove_reminder",
            "remove_reminder_auto",
            "view"
          ],
          "examples": [ "view" ],
          "description": "action performed on the item."
        },
        "item": { "$ref": "#/$defs/itemObject", "description": "details for the item in log." },
        "search_id": {
          "type": "string",
          "examples": [ "testSearchId" ],
          "description": "helps with logging search if if the item is showed based on search."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to item view, impressions or if user opened the details."
    },
    "cart": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "cartId" ],
          "description": "id of the Cart on which events are being performed."
        },
        "action": {
          "type": "string",
          "enum": [ "add_item", "remove_item" ],
          "examples": [ "add_item" ],
          "description": "action performed on the item in cart."
        },
        "item": { "$ref": "#/$defs/itemObject", "description": "details for the item in log." },
        "cart_price": { "type": "number", "examples": [ 12 ], "description": "total price of the cart." },
        "currency": {
          "type": "string",
          "examples": [ "USD" ],
          "description": "currency code for the price of the whole cart. Currency in itemObject and here should be same."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to cart in the app."
    },
    "checkout": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "orderId" ],
          "description": "id of the order is checkout is successful else cart id if the checkout is not successful."
        },
        "cart_id": {
          "type": "string",
          "examples": [ "cartId" ],
          "description": "id of the Cart on which events are being performed."
        },
        "is_successful": {
          "type": "boolean",
          "examples": [ true ],
          "description": "reflect if the checkout is successful or not."
        },
        "items": { "type": "array", "description": "list of items in the checkout." },
        "cart_price": { "type": "number", "examples": [ 12 ], "description": "total price of the checkout." },
        "currency": {
          "type": "string",
          "examples": [ "USD" ],
          "description": "currency code for the price of the checkout. Currency in all itemObject and here should be same."
        },

        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to checkout in the app."
    },
    "delivery": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "deliveredId" ], "description": "Id for the delivery." },
        "action": {
          "type": "string",
          "enum": [ "delivered" ],
          "examples": [ "delivered" ],
          "description": "action on the delivery of the element."
        },
        "order_id": {
          "type": "string",
          "examples": [ "orderId" ],
          "description": "id of the order being delivered."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to delivery of the order."
    },
    "cancel_checkout": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "testId" ],
          "description": "Id for the order or cart being discarded or cancelled."
        },
        "type": {
          "type": "string",
          "enum": [ "cart", "order" ],
          "examples": [ "cart" ],
          "description": "type of the checkout that is being cancelled either cart or order."
        },
        "items": { "type": "array", "description": "list of items in the checkout." },
        "reason": {
          "type": "string",
          "examples": [ "Process Too Long" ],
          "description": "reason for which the order/cart is being cancelled/discarded."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "is used to log the event when the order/cart is canceled."
    },
    "module": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "moduleId" ], "description": "id of the module." },
        "action": {
          "type": "string",
          "enum": [ "view" ],
          "examples": [ "view" ],
          "description": "action performed on the module."
        },
        "progress": {
          "type": "integer",
          "examples": [ 75 ],
          "description": "completion progress percentage."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to module of e-learning section."
    },
    "exam": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "examId" ], "description": "id of the exam." },
        "action": {
          "type": "string",
          "enum": [ "start", "submit", "result" ],
          "examples": [ "start" ],
          "description": "action performed on the exam."
        },
        "duration": {
          "type": "integer",
          "examples": [ 75 ],
          "description": "time spent on the exam, in seconds."
        },
        "score": { "type": "number", "examples": [ 90.5 ], "description": "score achieved for the exam." },
        "is_passed": { "type": "boolean", "examples": [ true ], "description": "if user passed the exam?" },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to exam of e-learning section."
    },
    "question": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "questionId" ], "description": "id of the question." },
        "exam_id": {
          "type": "string",
          "examples": [ "examId" ],
          "description": "id of the exam from which the question is asked."
        },
        "action": {
          "type": "string",
          "enum": [ "answer", "skip" ],
          "examples": [ "answer" ],
          "description": "action performed on the question."
        },
        "answer_id": {
          "type": "string",
          "examples": [ "answerId" ],
          "description": "Id for the answer to the question."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to question of e-learning section."
    },
    "level": {
      "type": "object",
      "properties": {
        "prev_level": {
          "type": "integer",
          "examples": [ 65 ],
          "description": "previous/old level score of the user."
        },
        "new_level": { "type": "integer", "examples": [ 100 ], "description": "new level score of the user." },
        "module_id": {
          "type": "string",
          "examples": [ "moduleId" ],
          "description": "Id for the module if level update is related to e-learning."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to updating user level in app."
    },
    "milestone": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "examples": [ "milestoneId" ],
          "description": "id for the milestone."
        },
        "action": {
          "type": "string",
          "enum": [ "achieved" ],
          "examples": [ "achieved" ],
          "description": "action regarding user milestone."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to updating user milestone in app."
    },
    "promo": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "promoId" ], "description": "id for the Promo." },
        "action": {
          "type": "string",
          "enum": [ "view", "apply" ],
          "examples": [ "apply" ],
          "description": "action regarding promo event, if the event is triggered for viewing promo or applying promo on the item."
        },
        "title": {
          "type": "string",
          "examples": [ "buy 3 and get 10% off" ],
          "description": "promotional title for the promo."
        },
        "type": {
          "type": "string",
          "enum": [ "add_to_cart", "coupon" ],
          "examples": [ "add_to_cart" ],
          "description": "type of the promo that if it is related to add the product in cart or for coupon."
        },
        "items": { "type": "array", "description": "list of items in the promo." },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "is to log the events associated of the promo lists and promo items and when they are clicked on."
    },
    "deferred_payment": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "paymentId" ], "description": "id for the payment." },
        "order_id": {
          "type": "string",
          "examples": [ "orderId" ],
          "description": "id for the order payment is made for."
        },
        "action": {
          "type": "string",
          "enum": [ "payment_processed" ],
          "examples": [ "payment_processed" ],
          "description": "action regarding payment."
        },
        "type": {
          "type": "string",
          "enum": [ "bank_transfer", "cheque", "cod", "credit", "pos", "bank_card", "other" ],
          "examples": [ "bank_transfer" ],
          "description": "method of payment being selected for the payment."
        },
        "payment_amount": {
          "type": "number",
          "examples": [ 15 ],
          "description": "amount for which the payment is made."
        },
        "account_balance": {
          "type": "number",
          "examples": [ 130 ],
          "description": "current account balance for user after payment amount is added."
        },
        "currency": {
          "type": "string",
          "examples": [ "USD" ],
          "description": "currency of the payment being made (ISO 4217)."
        },

        "is_successful": {
          "type": "boolean",
          "examples": [ true ],
          "description": "boolean to represent if the payment is successful or not."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "To log events related to payments in uses cases where Buy Now Pay Later is implemented."
    },
    "payment_method": {
      "type": "object",
      "properties": {
        "order_id": {
          "type": "string",
          "examples": [ "orderId" ],
          "description": "id for the order payment is made for."
        },
        "type": {
          "type": "string",
          "enum": [ "bank_transfer", "cheque", "cod", "credit", "pos", "bank_card", "other" ],
          "examples": [ "bank_transfer" ],
          "description": "method of payment being selected for the payment."
        },
        "payment_amount": {
          "type": "number",
          "examples": [ 15 ],
          "description": "amount for which the payment is made."
        },
        "currency": {
          "type": "string",
          "examples": [ "USD" ],
          "description": "currency of the payment being made (ISO 4217)."
        },
        "meta": {
          "type": "object",
          "examples": [ "appName:causalfoundry" ],
          "description": "can use this to log extra data related to the event. This will only show on the platform and will not be processed."
        }
      },
      "description": "is to log events for payments. Which method of the payment is selected for the order."
    },
    "itemObject": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "itemId" ], "description": "Id for the item." },
        "type": {
          "type": "string",
          "enum": [
            "drug",
            "blood",
            "oxygen",
            "medical_equipment",
            "electronics",
            "clothing",
            "book",
            "misc"
          ],
          "examples": [ "drug" ],
          "description": "type of the item in the log."
        },
        "quantity": {
          "type": "integer",
          "examples": [ 1 ],
          "description": "quantity of the item, default is 1."
        },
        "price": {
          "type": "number",
          "examples": [ 12.3 ],
          "description": "total price for the item in log (unit_price * quantity)."
        },
        "currency": {
          "type": "string",
          "examples": [ "USD" ],
          "description": "currency of the item (ISO 4217)."
        },
        "stock_status": {
          "type": "string",
          "enum": [ "in_stock", "low_stock", "out_of_stock" ],
          "examples": [ "in_stock" ],
          "description": "to reflect the stock status of the item."
        },
        "promo_id": {
          "type": "string",
          "examples": [ "testPromoId" ],
          "description": "id for the promo if any applied on the item."
        },
        "meta": {
          "type": "object",
          "examples": [ "cross_matching:false" ],
          "description": "additional properties required for item with types as blood and oxygen. Also when the event type is checkout."
        }
      },
      "required": [ "id", "type", "quantity", "price", "currency" ]
    },
    "itemTypeObject": {
      "type": "object",
      "properties": {
        "id": { "type": "string", "examples": [ "itemId" ], "description": "Id for the item." },
        "type": {
          "type": "string",
          "enum": [
            "drug",
            "blood",
            "oxygen",
            "medical_equipment",
            "electronics",
            "clothing",
            "book",
            "misc"
          ],
          "examples": [ "drug" ],
          "description": "type of the item in the log."
        },
        "meta": {
          "type": "object",
          "examples": [ "cross_matching:false" ],
          "description": "additional properties required for item with types as blood and oxygen. Also when the event type is checkout."
        }
      },
      "required": [ "id", "type" ]
    },
    "bloodMetaObject": {
      "type": "object",
      "properties": {
        "cross_matching": {
          "type": "boolean",
          "examples": [ false ],
          "description": "if the blood order also have a cross matching add-on enabled."
        },
        "temperature_strips": {
          "type": "boolean",
          "examples": [ false ],
          "description": "if the blood order have temperature strip add-on enabled."
        },
        "extra_tests": {
          "type": "boolean",
          "examples": [ false ],
          "description": "if the blood order have extra tests add-on enabled."
        },
        "reason": {
          "type": "string",
          "examples": [ "General Surgery" ],
          "description": "reason for which blood is being purchased."
        }
      },
      "required": [ "cross_matching", "temperature_strips", "extra_tests", "reason" ]
    },
    "oxygenMetaObject": {
      "type": "object",
      "properties": {
        "order_type": {
          "type": "string",
          "examples": [ "refill" ],
          "description": "type of the order for oxygen, refill, exchange or new cylinder."
        },
        "reason": {
          "type": "string",
          "examples": [ "General Surgery" ],
          "description": "reason for which the oxygen is being purchased."
        }
      },
      "required": [ "order_type", "reason" ]
    }
  },
  "oneOf": [
    {
      "properties": { "type": { "const": "app" }, "ctx": { "type": "object", "$ref": "#/$defs/app" } }
    },
    {
      "properties": { "type": { "const": "cart" }, "ctx": { "type": "object", "$ref": "#/$defs/cart" } }
    },
    {
      "properties": {
        "type": { "const": "cancel_checkout" },
        "ctx": { "type": "object", "$ref": "#/$defs/cancel_checkout" }
      }
    },
    {
      "properties": {
        "type": { "const": "checkout" },
        "ctx": { "type": "object", "$ref": "#/$defs/checkout" }
      }
    },
    {
      "properties": {
        "type": { "const": "deferred_payment" },
        "ctx": { "type": "object", "$ref": "#/$defs/deferred_payment" }
      }
    },
    {
      "properties": {
        "type": { "const": "delivery" },
        "ctx": { "type": "object", "$ref": "#/$defs/delivery" }
      }
    },
    {
      "properties": { "type": { "const": "exam" }, "ctx": { "type": "object", "$ref": "#/$defs/exam" } }
    },
    {
      "properties": {
        "type": { "const": "identify" },
        "ctx": { "type": "object", "$ref": "#/$defs/identify" }
      }
    },
    {
      "properties": { "type": { "const": "item" }, "ctx": { "type": "object", "$ref": "#/$defs/item" } }
    },
    {
      "properties": { "type": { "const": "level" }, "ctx": { "type": "object", "$ref": "#/$defs/level" } }
    },
    {
      "properties": { "type": { "const": "media" }, "ctx": { "type": "object", "$ref": "#/$defs/media" } }
    },
    {
      "properties": {
        "type": { "const": "milestone" },
        "ctx": { "type": "object", "$ref": "#/$defs/milestone" }
      }
    },
    {
      "properties": { "type": { "const": "module" }, "ctx": { "type": "object", "$ref": "#/$defs/module" } }
    },
    {
      "properties": {
        "type": { "const": "nudge_response" },
        "ctx": { "type": "object", "$ref": "#/$defs/nudge_response" }
      }
    },
    {
      "properties": { "type": { "const": "page" }, "ctx": { "type": "object", "$ref": "#/$defs/page" } }
    },
    {
      "properties": {
        "type": { "const": "payment_method" },
        "ctx": { "type": "object", "$ref": "#/$defs/payment_method" }
      }
    },
    {
      "properties": { "type": { "const": "promo" }, "ctx": { "type": "object", "$ref": "#/$defs/promo" } }
    },
    {
      "properties": {
        "type": { "const": "question" },
        "ctx": { "type": "object", "$ref": "#/$defs/question" }
      }
    },
    {
      "properties": { "type": { "const": "rate" }, "ctx": { "type": "object", "$ref": "#/$defs/rate" } }
    },
    {
      "properties": { "type": { "const": "search" }, "ctx": { "type": "object", "$ref": "#/$defs/search" } }
    }
  ]
}
