{"action":"created","comment":{"url":"https://api.github.com/repos/okta/okta.github.io/pulls/comments/210245735","pull_request_review_id":146418036,"id":210245735,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMDI0NTczNQ==","diff_hunk":"@@ -0,0 +1,401 @@\n+---\n+layout: docs_page\n+weight: 2\n+title: Event API Deprecation\n+excerpt: How to migrate from the deprecated Events API to its System Log API replacement.\n+---\n+\n+# Event API Deprecation\n+\n+## Introduction\n+\n+To enable customers to leverage a unified platform for enriched, auditable event data, Okta will be concentrating its efforts on the new and improved [System Log API](/docs/api/resources/system_log) while deprecating the legacy [Events API](/docs/api/resources/events). \n+\n+This guide aims to help organizations migrate from the deprecated Events API to its System Log API replacement. It highlights some of the key structural, semantic, and operational differences (and similarities) between the two APIs to  the transition process. Furthermore, it contains information about the timeline of the deprecation rollout.\n+\n+> This guide does not attempt to cover specific use cases, detailed patterns of interaction or the intricacies of particular query parameters. For that, it is suggested to see the corresponding sections in the [System Log API](/docs/api/resources/system_log) documentation.\n+\n+## Timeline\n+\n+The following are the major dates relating to the Events API deprecation:\n+\n+| Date           | Events API Status                                                              |\n+| -------------- | ------------------------------------------------------------------------------ |\n+| **TBA**        | Events API is no longer available for new Okta organizations                   |\n+| **TBA**        | Events API will stop publishing new events                                     |\n+| **TBA**        | End of Life (EOL) - Events API will stop working and will HTTP 404 on requests |\n+\n+## Migration\n+\n+Applications and integrations using Events API must migrate to the System Log API to continue to operate.  You can export the data from the Events API at anytime before the EOL date. For applications and integrations that need to continue to pull down data from Okta to operate, the following is information to show the comparison between the APIs and events to help with the migration.\n+\n+## Key Differences\n+\n+This section explores the notable differences between the two APIs, the resources and representations they expose, and how they are organized. These differences reflect a complete reimplementation of the system log platform. As a result, one can expect both gross and subtle differences.\n+\n+### Resources\n+\n+Both of the RESTful APIs provide a single read-only resource:\n+\n+| Events APIs            | System Log API         |\n+| ---------------------- | ---------------------- |\n+| `GET` `/api/v1/events` | `GET` `/api/v1/logs`   |\n+\n+For brevity, the Events API will often be referred to as `/events` and the System Log API as `/logs`.\n+\n+### Data Structure\n+\n+Each of the API resources has an associated data structure, also referred to as the resource \"representation\" or data model. The System Log API's representation is the [LogEvent object](/docs/api/resources/system_log#logevent-object). It captures the occurrence of notable system events. The Events API's representation is the [Event object](/docs/api/resources/events#event-model). LogEvent has more structure and a much richer set of data elements than Event. It is one of the principal improvements of the System Log API over the Events API.\n+\n+One of the most important attributes of an event in the Okta system is its \"event type\" designation. In the Events API, the [`action.objectType` attribute](/docs/api/resources/events#action-object) attribute denotes the event type. In the Logs API, the [`eventType` attribute](/docs/api/resources/system_log#event-types) represents the event type. The values in each of these fields are generally different, although there is some overlap for historical purposes. In the interest of easing the transition from the Events API to the System Log API, LogEvent's [`legacyEventType` attribute](/docs/api/resources/system_log#attributes) identifies the equivalent Event `action.objectType` value. The [Event Type Mapping](#event-type-mappings) section of this guide provides a static mapping of Events API event types to System Log API event types.\n+\n+Another essential difference between the two systems is the manner in which detailed information is encoded. The Events API textually encodes the specifics of a particular event instance into the [`action.message` attribute](/docs/api/resources/events#action-object). This encoding burdened consumers with having to correctly parse data themselves and led to brittleness in downstream systems when wording changed. The System Log API expands and enriches the data model to support storing these values as atomic, independent attributes. Context objects, such as the [AuthenticationContext object](/docs/api/resources/system_log#authenticationcontext-object) and [GeographicalContext objects](/docs/api/resources/system_log#geographicalcontext-object) objects, provide attributes that are common across event types. The [DebugContext object](/docs/api/resources/system_log#debugcontext-object) houses event-type-specific attributes.\n+\n+#### Event / LogEvent Comparison Example\n+\n+This section illustrates the differences between the Events and System Log data models using a single admin user login event as an example.\n+\n+##### Events API Event\n+\n+The following is an example of an Event API successful admin login event instance with the event type `app.admin.sso.login.success`:\n+\n+```json\n+{\n+   \"eventId\":\"tev2FSkoWAARbKaFBBfPPXUWA1533221531000\",\n+   \"sessionId\":\"102PfloXybbT3q1IOdqDAQoeQ\",\n+   \"requestId\":\"W2Mam7t4pcvodL-w@kNCrQAABSM\",\n+   \"published\":\"2018-08-02T14:52:11.000Z\",\n+   \"action\":{\n+      \"message\":\"User logged in to the Admin app\",\n+      \"categories\":[\n+\n+      ],\n+      \"objectType\":\"app.admin.sso.login.success\",\n+      \"requestUri\":\"/admin/sso/request\"\n+   },\n+   \"actors\":[\n+      {\n+         \"id\":\"00u1qmc3wcC6KIsgi0g7\",\n+         \"displayName\":\"Jane Doe\",\n+         \"login\":\"jdoe@example.com\",\n+         \"objectType\":\"User\"\n+      },\n+      {\n+         \"id\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3)...\",\n+         \"displayName\":\"CHROME\",\n+         \"ipAddress\":\"99.225.99.159\",\n+         \"objectType\":\"Client\"\n+      }\n+   ],\n+   \"targets\":[\n+      {\n+         \"id\":\"00u1qmc3wcC6KIsgi0g7\",\n+         \"displayName\":\"Jane Doe\",\n+         \"login\":\"jdoe@example.com\",\n+         \"objectType\":\"User\"\n+      },\n+      {\n+         \"id\":\"0oa1qmc3w1qLYTPVn0g7\",\n+         \"displayName\":\"Okta Administration\",\n+         \"objectType\":\"AppInstance\"\n+      }\n+   ]\n+}\n+```\n+\n+The data structure is both narrow in its top-level attributes and shallow in object attribute nesting.\n+\n+##### System Log API LogEvent\n+\n+The following is the corresponding event of a successful user session accessing the admin app as captured in the System Log API with the event type `user.session.access_admin_app`:\n+\n+```json\n+   {\n+      \"actor\":{\n+         \"id\":\"00u1qmc3wcC6KIsgi0g7\",\n+         \"type\":\"User\",\n+         \"alternateId\":\"jdoe@example.com\",\n+         \"displayName\":\"Jane Doe\",\n+         \"detailEntry\":null\n+      },\n+      \"client\":{\n+         \"userAgent\":{\n+            \"rawUserAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3)...\",\n+            \"os\":\"Mac OS X\",\n+            \"browser\":\"CHROME\"\n+         },\n+         \"zone\":\"null\",\n+         \"device\":\"Computer\",\n+         \"id\":null,\n+         \"ipAddress\":\"99.225.99.159\",\n+         \"geographicalContext\":{\n+            \"city\":\"Toronto\",\n+            \"state\":\"Ontario\",\n+            \"country\":\"Canada\",\n+            \"postalCode\":\"M6G\",\n+            \"geolocation\":{\n+               \"lat\":43.6655,\n+               \"lon\":-79.4204\n+            }\n+         }\n+      },\n+      \"authenticationContext\":{\n+         \"authenticationProvider\":null,\n+         \"credentialProvider\":null,\n+         \"credentialType\":null,\n+         \"issuer\":null,\n+         \"interface\":null,\n+         \"authenticationStep\":0,\n+         \"externalSessionId\":\"102PfloXybbT3q1IOdqDAQoeQ\"\n+      },\n+      \"displayMessage\":\"User accessing Okta admin app\",\n+      \"eventType\":\"user.session.access_admin_app\",\n+      \"outcome\":{\n+         \"result\":\"SUCCESS\",\n+         \"reason\":null\n+      },\n+      \"published\":\"2018-08-02T14:52:11.272Z\",\n+      \"securityContext\":{\n+         \"asNumber\":null,\n+         \"asOrg\":null,\n+         \"isp\":null,\n+         \"domain\":null,\n+         \"isProxy\":null\n+      },\n+      \"severity\":\"INFO\",\n+      \"debugContext\":{\n+         \"debugData\":{\n+            \"requestUri\":\"/admin/sso/request\"\n+         }\n+      },\n+      \"legacyEventType\":\"app.admin.sso.login.success\",\n+      \"transaction\":{\n+         \"type\":\"WEB\",\n+         \"id\":\"W2Mam7t4pcvodL-w@kNCrQAABSM\",\n+         \"detail\":{\n+\n+         }\n+      },\n+      \"uuid\":\"b5ef15a1-e78f-4125-b425-cc10f04e24f3\",\n+      \"version\":\"0\",\n+      \"request\":{\n+         \"ipChain\":[\n+            {\n+               \"ip\":\"99.225.99.159\",\n+               \"geographicalContext\":{\n+                  \"city\":\"Toronto\",\n+                  \"state\":\"Ontario\",\n+                  \"country\":\"Canada\",\n+                  \"postalCode\":\"M6G\",\n+                  \"geolocation\":{\n+                     \"lat\":43.6655,\n+                     \"lon\":-79.4204\n+                  }\n+               },\n+               \"version\":\"V4\",\n+               \"source\":null\n+            }\n+         ]\n+      },\n+      \"target\":[\n+         {\n+            \"id\":\"0ua1qmc3wf2xDawpN0g7\",\n+            \"type\":\"AppUser\",\n+            \"alternateId\":\"unknown\",\n+            \"displayName\":\"Jane Doe\",\n+            \"detailEntry\":null\n+         }\n+      ]\n+   }\n+```\n+\n+Note the System Log API representation's improved structure and additional embedded information when compared with the Event API's Event representation. For example, the System Log API's `client.geographicalContext` attribute captures the geolocation of the client accessing the system. This attribute is unavailable in the Events API.\n+\n+##### Event / System Log API Event Attribute Mapping\n+\n+Given the above events from each API, the following compares each leaf-level attribute. [JSON Pointer](https://tools.ietf.org/html/rfc6901) notation is used to specify the compared attribute values.\n+\n+| Event                     | LogEvent                                                 | Notes                                        |\n+| ------------------------- | -------------------------------------------------------- | -------------------------------------------- |\n+| `/action/categories`      |                                                          | Always empty |\n+| `/actors/0/login`         | `/actor/alternateId`                                     | Generally same values |\n+| `/actors/0/displayName`   | `/actor/displayName`                                     | Generally same values |\n+| `/actors/0/id`            | `/actor/id`                                              | Generally same values |\n+| `/actors/0/objectType`    | `/actor/type`                                            | Generally same values |\n+|                           | `/authenticationContext/authenticationStep`              | New |\n+| `/sessionId`              | `/authenticationContext/externalSessionId`               | New |\n+| `/actors/1/objectType`    | `/client/device`                                         | Different values |\n+|                           | `/client/geographicalContext/city`                       | New |\n+|                           | `/client/geographicalContext/country`                    | New |\n+|                           | `/client/geographicalContext/geolocation`                | New |\n+|                           | `/client/geographicalContext/geolocation/lat`            | New |\n+|                           | `/client/geographicalContext/geolocation/lon`            | New |\n+|                           | `/client/geographicalContext/postalCode`                 | New |\n+|                           | `/client/geographicalContext/state`                      | New |\n+| `/actors/1/ipAddress`     | `/client/ipAddress`                                      | New |\n+| `/actors/1/displayName`   | `/client/userAgent/browser`                              | New |\n+|                           | `/client/userAgent/os`                                   | New |\n+| `/actors/1/id`            | `/client/userAgent/rawUserAgent`                         | New |\n+|                           | `/client/zone`                                           | New |\n+| `/action/requestUri`      | `/debugContext/debugData/requestUri`                     | New |\n+| `/action/message`         | `/displayMessage`                                        | Generally less content |\n+| `/action/objectType`      | `/eventType`                                             | Generally contains different ids (see /Event Type Mappings(#event-type-mappings)) |\n+|                           | `/legacyEventType`                                       | Contains `/action/objectType` as its value |\n+|                           | `/outcome/result`                                        | Contains value that is encoded in `/action/objectType` suffix |\n+| `/published`              | `/published`                                             | Contains slightly different values |\n+|                           | `/request/ipChain/0/geographicalContext`                 | New |\n+|                           | `/request/ipChain/0/geographicalContext/city`            | New |\n+|                           | `/request/ipChain/0/geographicalContext/country`         | New |\n+|                           | `/request/ipChain/0/geographicalContext/geolocation`     | New |\n+|                           | `/request/ipChain/0/geographicalContext/geolocation/lat` | New |\n+|                           | `/request/ipChain/0/geographicalContext/geolocation/lon` | New |\n+|                           | `/request/ipChain/0/geographicalContext/postalCode`      | New |\n+|                           | `/request/ipChain/0/geographicalContext/state`           | New |\n+| `/actors/1/ipAddress`     | `/request/ipChain/0/ip`                                  | New |\n+|                           | `/request/ipChain/0/version`                             | New |\n+|                           | `/securityContext`                                       | New |\n+|                           | `/severity`                                              | New |\n+| `/targets/0/displayName`  | `/target/0/displayName`                                  | Generally same values |\n+| `/targets/0/id`           | `/target/0/id`                                           | Generally same values |\n+| `/targets/0/login`        | `/target/0/alternateId`                                  | Generally same values |\n+| `/targets/0/objectType`   | `/target/0/type`                                         | Generally same values |\n+|                           | `/transaction/detail`                                    | Generally same values |\n+| `/requestId`              | `/transaction/id`                                        | When `/transaction/type` is `WEB` |\n+|                           | `/transaction/type`                                      | New |\n+| `/eventId`                | `/uuid`                                                  | Different values |\n+|                           | `/version`                                               | New |\n+\n+Note that there is only one `actor` in System Log API compared to potentially multiple values in Events API's `actors` attribute. Instead, the System Log API adds a `client` attribute to hold any secondary actor to make it easier for consumers to access. \n+\n+### Identity\n+\n+The identity of a particular event distinguishes it from all other events instances. The Events API encodes this information in the `eventId` as a 25 character alpha-numeric value with the `tev` prefix (e.g., `tev2FSkoWAARbKaFBBfPPXUWA1533221531000 `). On the other hand, the System Log API represents identity using a completely different scheme in the `uuid` attribute. As the field name suggests, these are UUIDs (e.g., `b5ef15a1-e78f-4125-b425-cc10f04e24f3`) that are randomly-generated and unique. There is no identity value mapping between corresponding events of the two APIs. As a consequence, you cannot infer the one from the other.\n+\n+All other system identifiers are unchanged (e.g., user identifiers and application identifiers).\n+\n+### Event Types\n+\n+Event types are the primary method of organization within the Okta event system. They broadly categorize classes of events by an event type identifier. The System Log API has half the number of event types of the Events API. This helps event stream consumers identify and filter events more easily.\n+\n+#### Outcome Agnostic Event Types\n+\n+To the extent possible, event types have removed the logical outcome of the occurrence from the event type id. For example, the `user.session.start` event type replaces the following `/events` equivalents:\n+\n+-  `core.user_auth.login_success`\n+-  `core.user_auth.login_denied`\n+-  `core.user_auth.login_failed`\n+-  `core.user_auth.login_failed.policy_denied`\n+-  `core.user_auth.invalid_certificate`\n+\n+Instead, this information has been moved to the body of the event and is encoded in the [Outcome object](/docs/api/resources/system_log#outcome-object):\n+\n+```json\n+{\n+  \"outcome\": {\n+    \"result\": \"FAILURE\",\n+    \"reason\": \"INVALID_LOGIN\"\n+  },\n+  ...\n+}\n+```\n+\n+This general pattern results in a reduced number of event types making them easier to comprehend and navigate.\n+\n+#### Vendor Agnostic Event Types\n+\n+In `/events`, there are a multitude of events that include partner specific context information into the message. e.g.:\n+\n+- `app.boxnet.api.error.personal_folder_sync_state`\n+- `app.concur.api.error.check_user_exists`\n+- `app.confluence.api.error.get.user`\n+\n+These were primarily used to log errors and create debug context. With `/logs`, we've used a more generic event (e.g., `application.call_api`) to log a severity \"Debug\" type message to capture this type of information. If the event is related to an app, that will be included in the \"target\" and can be easily queried and accessed.\n+\n+### Querying\n+\n+#### Filtering\n+\n+Syntactically, filtering between the two APIs is largely unchanged. For example, the `filter` parameter continues to use the [SCIM filter expressions](https://tools.ietf.org/html/rfc7644#section-3.4.2.2) for expressing which events to return by constraining attribute values by various operators. However, the allowable attribute that can be searched is now almost unrestricted. Outside of `published`, any model attribute that exists can be queried. The following filter illustrates an expression that constrains the value of a sub-attribute:\n+\n+```groovy\n+filter=debugContext.debugData.requestUri eq \"/login/do-login\"\n+```\n+\n+This opens up many possibilities for selectively retrieving only the data of interest. However, as indicated above `published` is not supported in the `filter` parameter. To perform temporal filtering, `since` and `until` parameters must be used. Please see (Time Range)[#time-range] for details.\n+\n+Furthermore, the new API now supports the `co` \"contains\" operator where the specified value must be a substring of the attribute value.\n+\n+A new \"keyword filtering\" feature has been introduced via the [`q` parameter](/docs/api/resources/system_log#keyword-filter).\n+\n+#### Time Range\n+\n+In the Events API, there is only one formal query parameter that supports defining the temporal scope of the events returned: `startDate`. In the Logs API, there is now `since` (the equivalent of `startDate`) and a new [`until` parameter](/docs/api/resources/system_log#request-parameters) which defines the end time bound of the query interval. Both of these operate against the [`published ` attribute](/docs/api/resources/system_log#attributes). \n+\n+A subtle difference between `stateDate` and `since`/`until` is that the former was very liberal in the format that was accepted. In the System Log API, `since`/`until` values are required to conform to [Internet Date/Time Format profile of ISO 8601](https://tools.ietf.org/html/rfc3339#page-8). This is to reduce the chance for format ambiguity (e.g. timezone offsets, etc.) and accidental misuse by consumers.\n+\n+#### Sorting\n+\n+Limited sort ordering by `published` is now possible via the System Log API [`sortOrder` parameter](/docs/api/resources/system_log#request-parameters). When combined with the `after` parameter, this enables queries to paginate backwards through events in a lossless fashion. Iterating forward is possible in both systems.\n+\n+In order to ensure no loss of events while polling, sorting changes to become the \"persisted time\" of the LogEvent, rather than it's \"published time\". This is in contrast to the non-polling case where events are always sorted with respect to `published`. Please see [Polling Requests](/docs/api/resources/system_log#polling-requests) for details.\n+\n+Note that the Events API does not support custom sorting.\n+\n+### Limits\n+\n+Both APIs support a `limit` query parameter that governs the number of events per request to return. In the Events API, the both the maximum and default value is 1000 events. The System Log API shares the same maximum value, however, the default value is now `100` events. See [`limit` parameter](/docs/api/resources/system_log#request-parameters) for details.\n+\n+### Polling\n+\n+Polling is the process used to reliably ingest data from Okta into an external system. Both APIs use the `after` parameter in conjunction with `Link` response headers to safely pull the event stream. \n+\n+When you first make an API call and get a cursor-paged list of objects, the end of the list will be the point at which you do not receive another `next` link value with the response. This holds true for all but two cases:\n+\n+1. [Events API](/docs/api/resources/events): The `next` link always exists, since the [Events API](/docs/api/resources/events) is like a stream of data with a cursor.\n+2. [System Log API](/docs/api/resources/system_log): The `next` link will always exist in polling queries in the [System Log API](/docs/api/resources/system_log). A polling query is defined as an `ASCENDING` query with an empty or absent `until` parameter. Like in the [Events API](/docs/api/resources/events), the polling query is a stream of data.\n+\n+Please see [Transferring Data to a Separate System](/docs/api/resources/system_log#transferring-data-to-a-separate-system) and the general information on [Link Header](/docs/api/getting_started/design_principles#link-header)s for additional details.\n+\n+## Event Type Mappings\n+\n+The table in [Event Types](/docs/api/resources/event-types#event-type-mappings) describes the complete relationship between the Events API and System Log API event type systems. This relationship is generally many-to-one, but there are a few exceptions. Note that there are currently some event types which do not have an Events API equivalent.\n+\n+> **Important:** Going forward the Events API will not be tracking new event types added to the System Log API. For this reason we highly recommend upgrading to the System Log API.\n+","path":"_source/_use_cases/events-api-deprecation/index.md","position":364,"original_position":364,"commit_id":"0800c689e117dd493c5090157ffd0b2d42765806","original_commit_id":"0800c689e117dd493c5090157ffd0b2d42765806","user":{"login":"bobtiernay-okta","id":25536705,"node_id":"MDQ6VXNlcjI1NTM2NzA1","avatar_url":"https://avatars1.githubusercontent.com/u/25536705?v=4","gravatar_id":"","url":"https://api.github.com/users/bobtiernay-okta","html_url":"https://github.com/bobtiernay-okta","followers_url":"https://api.github.com/users/bobtiernay-okta/followers","following_url":"https://api.github.com/users/bobtiernay-okta/following{/other_user}","gists_url":"https://api.github.com/users/bobtiernay-okta/gists{/gist_id}","starred_url":"https://api.github.com/users/bobtiernay-okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobtiernay-okta/subscriptions","organizations_url":"https://api.github.com/users/bobtiernay-okta/orgs","repos_url":"https://api.github.com/users/bobtiernay-okta/repos","events_url":"https://api.github.com/users/bobtiernay-okta/events{/privacy}","received_events_url":"https://api.github.com/users/bobtiernay-okta/received_events","type":"User","site_admin":false},"body":"Was considering adding some information from OKTA-180678 here. ","created_at":"2018-08-15T11:59:05Z","updated_at":"2018-08-15T11:59:06Z","html_url":"https://github.com/okta/okta.github.io/pull/2249#discussion_r210245735","pull_request_url":"https://api.github.com/repos/okta/okta.github.io/pulls/2249","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/comments/210245735"},"html":{"href":"https://github.com/okta/okta.github.io/pull/2249#discussion_r210245735"},"pull_request":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/2249"}}},"pull_request":{"url":"https://api.github.com/repos/okta/okta.github.io/pulls/2249","id":207646335,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA3NjQ2MzM1","html_url":"https://github.com/okta/okta.github.io/pull/2249","diff_url":"https://github.com/okta/okta.github.io/pull/2249.diff","patch_url":"https://github.com/okta/okta.github.io/pull/2249.patch","issue_url":"https://api.github.com/repos/okta/okta.github.io/issues/2249","number":2249,"state":"open","locked":false,"title":"OKTA-183016: Adds Events API to System Log API migration guide for review","user":{"login":"bobtiernay-okta","id":25536705,"node_id":"MDQ6VXNlcjI1NTM2NzA1","avatar_url":"https://avatars1.githubusercontent.com/u/25536705?v=4","gravatar_id":"","url":"https://api.github.com/users/bobtiernay-okta","html_url":"https://github.com/bobtiernay-okta","followers_url":"https://api.github.com/users/bobtiernay-okta/followers","following_url":"https://api.github.com/users/bobtiernay-okta/following{/other_user}","gists_url":"https://api.github.com/users/bobtiernay-okta/gists{/gist_id}","starred_url":"https://api.github.com/users/bobtiernay-okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobtiernay-okta/subscriptions","organizations_url":"https://api.github.com/users/bobtiernay-okta/orgs","repos_url":"https://api.github.com/users/bobtiernay-okta/repos","events_url":"https://api.github.com/users/bobtiernay-okta/events{/privacy}","received_events_url":"https://api.github.com/users/bobtiernay-okta/received_events","type":"User","site_admin":false},"body":"## Description:\r\nAdds Events API to System Log API migration guide for review.\r\n\r\nNote that this is a DRAFT copy that is intended to be integrated into [OKTA-182041](https://oktainc.atlassian.net/browse/OKTA-182041).\r\n\r\n![image](https://user-images.githubusercontent.com/25536705/44128448-1a1946f4-a011-11e8-90ad-33bafa9cfb4d.png)\r\n\r\n### Resolves:\r\n* [OKTA-183016](https://oktainc.atlassian.net/browse/OKTA-183016)\r\n\r\n### PDF\r\nFor easy viewing, you may review the following PDF:\r\n\r\n[Event API Deprecation _ Okta Developer.pdf](https://github.com/okta/okta.github.io/files/2288972/Event.API.Deprecation._.Okta.Developer.pdf)\r\n\r\n~~[events-logs-api-migration-guide.pdf](https://github.com/okta/okta.github.io/files/2278499/events-logs-api-migration-guide.pdf)~~\r\n","created_at":"2018-08-10T15:25:39Z","updated_at":"2018-08-15T11:59:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8f86755ad4f6672367703927fb67e8edaaa8e56c","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jakubvul-okta","id":26014374,"node_id":"MDQ6VXNlcjI2MDE0Mzc0","avatar_url":"https://avatars0.githubusercontent.com/u/26014374?v=4","gravatar_id":"","url":"https://api.github.com/users/jakubvul-okta","html_url":"https://github.com/jakubvul-okta","followers_url":"https://api.github.com/users/jakubvul-okta/followers","following_url":"https://api.github.com/users/jakubvul-okta/following{/other_user}","gists_url":"https://api.github.com/users/jakubvul-okta/gists{/gist_id}","starred_url":"https://api.github.com/users/jakubvul-okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakubvul-okta/subscriptions","organizations_url":"https://api.github.com/users/jakubvul-okta/orgs","repos_url":"https://api.github.com/users/jakubvul-okta/repos","events_url":"https://api.github.com/users/jakubvul-okta/events{/privacy}","received_events_url":"https://api.github.com/users/jakubvul-okta/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/okta/okta.github.io/pulls/2249/commits","review_comments_url":"https://api.github.com/repos/okta/okta.github.io/pulls/2249/comments","review_comment_url":"https://api.github.com/repos/okta/okta.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/okta/okta.github.io/issues/2249/comments","statuses_url":"https://api.github.com/repos/okta/okta.github.io/statuses/0800c689e117dd493c5090157ffd0b2d42765806","head":{"label":"okta:bt-OKTA-183016-event-migration-guide","ref":"bt-OKTA-183016-event-migration-guide","sha":"0800c689e117dd493c5090157ffd0b2d42765806","user":{"login":"okta","id":362460,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MjQ2MA==","avatar_url":"https://avatars1.githubusercontent.com/u/362460?v=4","gravatar_id":"","url":"https://api.github.com/users/okta","html_url":"https://github.com/okta","followers_url":"https://api.github.com/users/okta/followers","following_url":"https://api.github.com/users/okta/following{/other_user}","gists_url":"https://api.github.com/users/okta/gists{/gist_id}","starred_url":"https://api.github.com/users/okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/okta/subscriptions","organizations_url":"https://api.github.com/users/okta/orgs","repos_url":"https://api.github.com/users/okta/repos","events_url":"https://api.github.com/users/okta/events{/privacy}","received_events_url":"https://api.github.com/users/okta/received_events","type":"Organization","site_admin":false},"repo":{"id":10953058,"node_id":"MDEwOlJlcG9zaXRvcnkxMDk1MzA1OA==","name":"okta.github.io","full_name":"okta/okta.github.io","owner":{"login":"okta","id":362460,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MjQ2MA==","avatar_url":"https://avatars1.githubusercontent.com/u/362460?v=4","gravatar_id":"","url":"https://api.github.com/users/okta","html_url":"https://github.com/okta","followers_url":"https://api.github.com/users/okta/followers","following_url":"https://api.github.com/users/okta/following{/other_user}","gists_url":"https://api.github.com/users/okta/gists{/gist_id}","starred_url":"https://api.github.com/users/okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/okta/subscriptions","organizations_url":"https://api.github.com/users/okta/orgs","repos_url":"https://api.github.com/users/okta/repos","events_url":"https://api.github.com/users/okta/events{/privacy}","received_events_url":"https://api.github.com/users/okta/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/okta/okta.github.io","description":"Okta Identity Platform API Docs and Developer Home","fork":false,"url":"https://api.github.com/repos/okta/okta.github.io","forks_url":"https://api.github.com/repos/okta/okta.github.io/forks","keys_url":"https://api.github.com/repos/okta/okta.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/okta/okta.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/okta/okta.github.io/teams","hooks_url":"https://api.github.com/repos/okta/okta.github.io/hooks","issue_events_url":"https://api.github.com/repos/okta/okta.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/okta/okta.github.io/events","assignees_url":"https://api.github.com/repos/okta/okta.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/okta/okta.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/okta/okta.github.io/tags","blobs_url":"https://api.github.com/repos/okta/okta.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/okta/okta.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/okta/okta.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/okta/okta.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/okta/okta.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/okta/okta.github.io/languages","stargazers_url":"https://api.github.com/repos/okta/okta.github.io/stargazers","contributors_url":"https://api.github.com/repos/okta/okta.github.io/contributors","subscribers_url":"https://api.github.com/repos/okta/okta.github.io/subscribers","subscription_url":"https://api.github.com/repos/okta/okta.github.io/subscription","commits_url":"https://api.github.com/repos/okta/okta.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/okta/okta.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/okta/okta.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/okta/okta.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/okta/okta.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/okta/okta.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/okta/okta.github.io/merges","archive_url":"https://api.github.com/repos/okta/okta.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/okta/okta.github.io/downloads","issues_url":"https://api.github.com/repos/okta/okta.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/okta/okta.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/okta/okta.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/okta/okta.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/okta/okta.github.io/labels{/name}","releases_url":"https://api.github.com/repos/okta/okta.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/okta/okta.github.io/deployments","created_at":"2013-06-25T23:22:38Z","updated_at":"2018-08-14T20:31:53Z","pushed_at":"2018-08-15T11:48:45Z","git_url":"git://github.com/okta/okta.github.io.git","ssh_url":"git@github.com:okta/okta.github.io.git","clone_url":"https://github.com/okta/okta.github.io.git","svn_url":"https://github.com/okta/okta.github.io","homepage":"http://developer.okta.com/","size":404719,"stargazers_count":48,"watchers_count":48,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":129,"mirror_url":null,"archived":false,"open_issues_count":54,"license":null,"forks":129,"open_issues":54,"watchers":48,"default_branch":"source"}},"base":{"label":"okta:source","ref":"source","sha":"be459d96a633fe231e845a9fd01aa52d668ff82e","user":{"login":"okta","id":362460,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MjQ2MA==","avatar_url":"https://avatars1.githubusercontent.com/u/362460?v=4","gravatar_id":"","url":"https://api.github.com/users/okta","html_url":"https://github.com/okta","followers_url":"https://api.github.com/users/okta/followers","following_url":"https://api.github.com/users/okta/following{/other_user}","gists_url":"https://api.github.com/users/okta/gists{/gist_id}","starred_url":"https://api.github.com/users/okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/okta/subscriptions","organizations_url":"https://api.github.com/users/okta/orgs","repos_url":"https://api.github.com/users/okta/repos","events_url":"https://api.github.com/users/okta/events{/privacy}","received_events_url":"https://api.github.com/users/okta/received_events","type":"Organization","site_admin":false},"repo":{"id":10953058,"node_id":"MDEwOlJlcG9zaXRvcnkxMDk1MzA1OA==","name":"okta.github.io","full_name":"okta/okta.github.io","owner":{"login":"okta","id":362460,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MjQ2MA==","avatar_url":"https://avatars1.githubusercontent.com/u/362460?v=4","gravatar_id":"","url":"https://api.github.com/users/okta","html_url":"https://github.com/okta","followers_url":"https://api.github.com/users/okta/followers","following_url":"https://api.github.com/users/okta/following{/other_user}","gists_url":"https://api.github.com/users/okta/gists{/gist_id}","starred_url":"https://api.github.com/users/okta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/okta/subscriptions","organizations_url":"https://api.github.com/users/okta/orgs","repos_url":"https://api.github.com/users/okta/repos","events_url":"https://api.github.com/users/okta/events{/privacy}","received_events_url":"https://api.github.com/users/okta/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/okta/okta.github.io","description":"Okta Identity Platform API Docs and Developer Home","fork":false,"url":"https://api.github.com/repos/okta/okta.github.io","forks_url":"https://api.github.com/repos/okta/okta.github.io/forks","keys_url":"https://api.github.com/repos/okta/okta.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/okta/okta.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/okta/okta.github.io/teams","hooks_url":"https://api.github.com/repos/okta/okta.github.io/hooks","issue_events_url":"https://api.github.com/repos/okta/okta.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/okta/okta.github.io/events","assignees_url":"https://api.github.com/repos/okta/okta.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/okta/okta.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/okta/okta.github.io/tags","blobs_url":"https://api.github.com/repos/okta/okta.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/okta/okta.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/okta/okta.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/okta/okta.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/okta/okta.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/okta/okta.github.io/languages","stargazers_url":"https://api.github.com/repos/okta/okta.github.io/stargazers","contributors_url":"https://api.github.com/repos/okta/okta.github.io/contributors","subscribers_url":"https://api.github.com/repos/okta/okta.github.io/subscribers","subscription_url":"https://api.github.com/repos/okta/okta.github.io/subscription","commits_url":"https://api.github.com/repos/okta/okta.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/okta/okta.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/okta/okta.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/okta/okta.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/okta/okta.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/okta/okta.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/okta/okta.github.io/merges","archive_url":"https://api.github.com/repos/okta/okta.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/okta/okta.github.io/downloads","issues_url":"https://api.github.com/repos/okta/okta.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/okta/okta.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/okta/okta.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/okta/okta.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/okta/okta.github.io/labels{/name}","releases_url":"https://api.github.com/repos/okta/okta.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/okta/okta.github.io/deployments","created_at":"2013-06-25T23:22:38Z","updated_at":"2018-08-14T20:31:53Z","pushed_at":"2018-08-15T11:48:45Z","git_url":"git://github.com/okta/okta.github.io.git","ssh_url":"git@github.com:okta/okta.github.io.git","clone_url":"https://github.com/okta/okta.github.io.git","svn_url":"https://github.com/okta/okta.github.io","homepage":"http://developer.okta.com/","size":404719,"stargazers_count":48,"watchers_count":48,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":129,"mirror_url":null,"archived":false,"open_issues_count":54,"license":null,"forks":129,"open_issues":54,"watchers":48,"default_branch":"source"}},"_links":{"self":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/2249"},"html":{"href":"https://github.com/okta/okta.github.io/pull/2249"},"issue":{"href":"https://api.github.com/repos/okta/okta.github.io/issues/2249"},"comments":{"href":"https://api.github.com/repos/okta/okta.github.io/issues/2249/comments"},"review_comments":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/2249/comments"},"review_comment":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/okta/okta.github.io/pulls/2249/commits"},"statuses":{"href":"https://api.github.com/repos/okta/okta.github.io/statuses/0800c689e117dd493c5090157ffd0b2d42765806"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"bobtiernay-okta"}}