Last updated
View events with Flex CLI
This guide shows you how to query and view events data using Flex CLI. Events tell you the change history of marketplace data resources and allow observing noteworthy events.
Required skills:
- basic command line
- text editing
Table of Contents
Flex CLI (Command-line interface) is a tool for examing and changing your marketplace's advanced configurations such as transaction processes and email templates.
This guide expects that you have already installed Flex CLI and are logged in with your API key. If not, it's recommended to first read the tutorial Getting started with Flex CLI.
In this guide, we will learn how the events of a marketplace can be queried using Flex CLI, how we can inspect events in more detail as well as combine Flex CLI with other tools to further process the event data.
In Flex, events represent changes in marketplace data resources such as listings, users and transactions. An event captures a single change in marketplace data, e.g. a user being created or a listing being updated. Events can be further analyzed to interpret them as logical actions such as a listing being published, a message being sent or a user having changed their email address by looking into what were the changed data fields. To learn more about events, have a look at the Events reference.
Querying events
The command for querying events using Flex CLI is events.
$ flex-cli help events
Get a list of events.
USAGE
  $ flex-cli events
OPTIONS
  --after-seqid=SEQUENCE_ID               Show events with sequence ID larger than (after) the specified.
  --after-ts=TIMESTAMP                    Show events created after the given timestamp, e.g. '--after-ts 2020-10-10' or '--after-ts 2020-10-10T10:00.000Z'
  --before-seqid=SEQUENCE_ID              Show events with sequence ID smaller than (before) the specified.
  --before-ts=TIMESTAMP                   Show events created before the given timestamp, e.g. '--before-ts 2020-11-15' or '--before-ts 2020-11-15T12:00.000Z'
  --filter=EVENT_TYPES                    Show only events of given types, e.g. '--filter listing/updated,user'.
  --json                                  Print full event data as one JSON string.
  --json-pretty                           Print full event data as indented multi-line JSON string.
  --related-resource=RELATED_RESOURCE_ID  Show events that are related to a specific resource ID.
  --resource=RESOURCE_ID                  Show events for a specific resource ID only.
  --seqid=SEQUENCE_ID                     Get only the event with the given sequence id.
  -l, --limit=NUMBER                      Show given number of events (default and max is 100). Can be combined with other parameters.
  -m, --marketplace=MARKETPLACE_ID        marketplace identifierEvents command supports various ways to query events. Querying without any of the additional parameters lists the 100 latest events for your marketplace:
$ flex-cli events -m my-marketplace-dev
Seq ID   Resource ID                           Event type                     Created at local time   Source           Actor
3391589  5fca1e5b-2004-4479-a68c-dfc8a03083b8  availabilityException/created  2020-12-04 1:32:43 PM   marketplace-api  jane@example.com
3391590  5fca1e5c-eda8-4f54-ac30-ee7fe1010d11  availabilityException/created  2020-12-04 1:32:44 PM   marketplace-api  jane@example.com
3462923  5dfb4a42-8937-47b5-b482-44679828939c  user/updated                   2020-12-07 3:17:30 PM   console          joe@example.com
3471843  5fce8536-61f5-4c85-8160-61b1799d256f  user/updated                   2020-12-07 9:45:38 PM   marketplace-api  joe@example.com
3471856  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/created                2020-12-07 9:47:19 PM   marketplace-api  joe@example.com
3471857  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:28 PM   marketplace-api  joe@example.com
3471858  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:38 PM   marketplace-api  joe@example.com
3471859  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:53 PM   marketplace-api  joe@example.com
3471860  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:56 PM   marketplace-api  joe@example.com
3471863  5fce8728-0f15-46e4-8ee2-c4955e0cc079  availabilityException/created  2020-12-07 9:48:56 PM   marketplace-api  joe@example.com
3471864  5fce872f-4081-4ca7-a40d-6eb2b003dcc2  availabilityException/created  2020-12-07 9:49:03 PM   marketplace-api  joe@example.com
3471865  5fce8730-c750-4427-bc58-09f685cc0b03  availabilityException/created  2020-12-07 9:49:04 PM   marketplace-api  joe@example.com
3471866  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:49:11 PM   marketplace-api  joe@example.com
3471873  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:50:35 PM   marketplace-api  joe@example.com
3471875  5fce8536-61f5-4c85-8160-61b1799d256f  user/updated                   2020-12-07 9:50:52 PM   marketplace-api  joe@example.com
3471890  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:53:15 PM   marketplace-api  joe@example.com
...The default table output mode lists a few key event attributes. It also shows an email address of the actor, i.e. the person who took the action that caused the event.
By adding the --limit (short version -l) parameter we can limit the
output to given number of events:
$ flex-cli events -l 2 -m my-marketplace-dev
Seq ID   Resource ID                           Event type                     Created at local time   Source           Actor
3391589  5fca1e5b-2004-4479-a68c-dfc8a03083b8  availabilityException/created  2020-12-04 1:32:43 PM   marketplace-api  jane@example.com
3391590  5fca1e5c-eda8-4f54-ac30-ee7fe1010d11  availabilityException/created  2020-12-04 1:32:44 PM   marketplace-api  jane@example.comWe can look at only certain type of events using the --filter
parameter:
$ flex-cli events --filter user/created,listing -m my-marketplace-dev
Seq ID   Resource ID                           Event type       Created at local time   Source           Actor
3471813  5fce8536-61f5-4c85-8160-61b1799d256f  user/created     2020-12-07 9:40:38 PM   marketplace-api
3471856  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/created  2020-12-07 9:47:19 PM   marketplace-api  joe@example.com
3471857  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:47:28 PM   marketplace-api  joe@example.com
...Filtering accepts multiple event types separated with commas. Event
types are of the form RESOURCE_TYPE/EVENT_SUBTYPE. You can filter with
full event type name or by only the resource type. For more information
about supported event types, see reference for
supported event types.
Using the --resource parameter we can query only events that are for a
certain known resource:
$ flex-cli events --resource 5fce86c7-e435-4047-ab3b-dc4fee02d51d -m my-marketplace-dev
Seq ID   Resource ID                           Event type       Created at local time   Source           Actor
3471856  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/created  2020-12-07 9:47:19 PM   marketplace-api  joe@example.com
3471857  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:47:28 PM   marketplace-api  joe@example.com
3471858  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:47:38 PM   marketplace-api  joe@example.com
3471859  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:47:53 PM   marketplace-api  joe@example.com
3471860  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:47:56 PM   marketplace-api  joe@example.com
3471866  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:49:11 PM   marketplace-api  joe@example.com
3471873  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:50:35 PM   marketplace-api  joe@example.com
3471890  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated  2020-12-07 9:53:15 PM   marketplace-api  joe@example.comIn this case the resource ID we passed in was a listing ID. This is useful when we want to investigate the change history of a specific resource.
Sometimes it is useful to find events not only for a specific resource
but also for other resources related to the specific resource. That is
possible using the --related-resource parameter:
$ flex-cli events --related-resource 5fce86c7-e435-4047-ab3b-dc4fee02d51d -m my-marketplace-dev
Seq ID   Resource ID                           Event type                     Created at local time   Source           Actor
3471856  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/created                2020-12-07 9:47:19 PM   marketplace-api  joe@example.com
3471857  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:28 PM   marketplace-api  joe@example.com
3471858  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:38 PM   marketplace-api  joe@example.com
3471859  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:53 PM   marketplace-api  joe@example.com
3471860  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:56 PM   marketplace-api  joe@example.com
3471863  5fce8728-0f15-46e4-8ee2-c4955e0cc079  availabilityException/created  2020-12-07 9:48:56 PM   marketplace-api  joe@example.com
3471864  5fce872f-4081-4ca7-a40d-6eb2b003dcc2  availabilityException/created  2020-12-07 9:49:03 PM   marketplace-api  joe@example.com
3471865  5fce8730-c750-4427-bc58-09f685cc0b03  availabilityException/created  2020-12-07 9:49:04 PM   marketplace-api  joe@example.com
3471866  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:49:11 PM   marketplace-api  joe@example.com
3471873  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:50:35 PM   marketplace-api  joe@example.com
3471890  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:53:15 PM   marketplace-api  joe@example.comIn this case the resource ID is again a listing ID. The returned events will include events about the listing itself as well as any other event that is for a resource that has a relationship to the given listing (such as availability exceptions, booking, transactions, and so on). This is useful when trying to investigate the change history of a listing's availability, the history of transactions for a given listing or user, and so on.
Flex CLI supports two different ways to look at events from the past. We can either use the sequence ID to define a query range or we can use timestamps matching event's created at. Sequence IDs are unique and strictly increasing, meaning that events that occurred later in time always have a larger sequence ID. With both options we can query either events after a known sequence ID / time or events right before a sequence id / time.
$ flex-cli events --after-seqid 3391593 -M my-marketplace-dev
...
$ flex-cli events --before-seqid 3462912  -m my-marketplace-dev
...
$ flex-cli events --after-ts 2020-12-05  -m my-marketplace-dev
...
$ flex-cli events --before-ts 2020-12-05T10:00.000Z  -m my-marketplace-devTimestamps can be given with date only or with the time component included using the ISO 8601 standard format. If the time component is omitted, it defaults to UTC midnight. Ranges are exclusive meaning that event with sequence ID 3391593 is not included in the output produced by the first command above but instead the output starts with the first event after that sequence ID.
The --filter, --resource and --limit parameters can also be
combined with time range queries. For example, we can get the next 100
user and listing events since 7th of December 2020 with the command:
$ flex-cli events --after-ts 2020-12-07 --filter user,listing -m my-marketplace-devOutput modes and examining events in detail
In addition to the default table output mode, Flex CLI supports --json
and --json-pretty modes. In the table output mode the CLI prints only
summary information about the events. This is useful when wanting to see
the big picture, which events happened and when. When you want to look
into the details of an event, you need to use a json mode. With the
filtering parameter --seqid we can target a single event:
$ flex-cli events --seqid 3471843 -m my-marketplace-dev --json-pretty
{
  "eventType": "user/updated",
  "createdAt": "2020-12-07T19:45:38.721Z",
  "resourceType": "user",
  "source": "source/marketplace-api",
  "resourceId": "5fce8536-61f5-4c85-8160-61b1799d256f",
  "id": "062569cb-dc3e-5a80-bde5-bb966072ecd6",
  "resource": {
    "deleted": false,
    "banned": false,
    "email": "joe@example.com",
    "profileImage": {
      "id": "5fce865b-dbc7-432a-85cc-ddb3a993eede"
    },
    "stripeConnected": false,
    "createdAt": "2020-12-07T19:40:38.902Z",
    "identityProviders": [],
    "pendingEmail": null,
    "emailVerified": true,
    "stripeAccount": null,
    "id": "5fce8536-61f5-4c85-8160-61b1799d256f",
    "marketplace": {
      "id": "5b83f0af-ed76-4fbf-9e71-e76b76c5abce"
    },
    "profile": {
      "displayName": "olli-test F",
      "firstName": "olli-test",
      "privateData": {},
      "protectedData": {},
      "bio": "Test users for event demo",
      "abbreviatedName": "oF",
      "lastName": "Foobar5",
      "publicData": {},
      "metadata": {}
    }
  },
  "auditData": {
    "userId": "5fce8536-61f5-4c85-8160-61b1799d256f",
    "adminId": null,
    "clientId": "039f4354-ccfa-4677-9395-2bf3f2294355",
    "requestId": "b43fddd6-f893-4a69-8661-ef159013019b"
  },
  "sequenceId": 3471843,
  "previousValues": {
    "profile": {
      "bio": null,
      "firstName": "Olli",
      "displayName": "Olli F",
      "abbreviatedName": "OF"
    },
    "profileImage": null
  },
  "marketplaceId": "5b83f0af-ed76-4fbf-9e71-e76b76c5abce"
}The event details reveal that this user update changed the bio,
firstName, displayName and abbreviatedName for a user. For more
information about how previousValues records changes, see event
reference for
resource data and previous values.
While --json-pretty is a good mode for examining the event details
manually, --json is the mode you want when needing to programmatically
parse the output. In --json mode Flex CLI prints the events as one
line JSON objects.
$ flex-cli events -m my-marketplace-dev --json | less
{"eventType":"availabilityException/created","createdAt":"2020-12-04T11:32:43.794Z","resourceType":"a
{"eventType":"availabilityException/created","createdAt":"2020-12-04T11:32:44.346Z","resourceType":"a
{"eventType":"availabilityException/created","createdAt":"2020-12-04T11:32:45.524Z","resourceType":"a
{"eventType":"availabilityException/created","createdAt":"2020-12-04T11:32:49.604Z","resourceType":"a
{"eventType":"availabilityException/deleted","createdAt":"2020-12-04T11:32:50.136Z","resourceType":"a
{"eventType":"user/updated","createdAt":"2020-12-07T13:15:42.313Z","resourceType":"user","source":"so
{"eventType":"user/updated","createdAt":"2020-12-07T13:17:30.935Z","resourceType":"user","source":"so
{"eventType":"user/updated","createdAt":"2020-12-07T13:36:28.469Z","resourceType":"user","source":"so
{"eventType":"availabilityException/created","createdAt":"2020-12-07T14:27:31.243Z","resourceType":"a
{"eventType":"availabilityException/created","createdAt":"2020-12-07T14:27:31.835Z","resourceType":"a
...The output can be easily parsed and transformed by using e.g. the wonderful jq command-line tool.
$ flex-cli events --filter listing -m my-marketplace-dev --json | jq '{sequenceId, eventType, source, changedKeys: (.previousValues // {} | keys)}'
{
  "sequenceId": 3471856,
  "eventType": "listing/created",
  "source": "source/marketplace-api",
  "changedKeys": []
}
{
  "sequenceId": 3471857,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "publicData"
  ]
}
{
  "sequenceId": 3471858,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "publicData"
  ]
}
{
  "sequenceId": 3471859,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "geolocation",
    "publicData"
  ]
}
{
  "sequenceId": 3471860,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "price"
  ]
}
{
  "sequenceId": 3471866,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "availabilityPlan"
  ]
}
{
  "sequenceId": 3471873,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "images"
  ]
}
{
  "sequenceId": 3471890,
  "eventType": "listing/updated",
  "source": "source/marketplace-api",
  "changedKeys": [
    "state"
  ]
}Live tailing events
Flex CLI also offers a way to follow events live as they happen, a.k.a.
live tail them. The command to do this is events tail
$ flex-cli help events tail
Tail events live as they happen
USAGE
  $ flex-cli events tail
OPTIONS
  --filter=EVENT_TYPES              Show only events of given types, e.g. '--filter listing/updated,user'.
  --json                            Print full event data as one JSON string.
  --json-pretty                     Print full event data as indented multi-line JSON string.
  --resource=RESOURCE_ID            Show events for a specific resource ID only.
  -l, --limit=NUMBER                Show given number of latest events and then start tailing (default is 10 and max is 100). Can be combined with other parameters.
  -m, --marketplace=MARKETPLACE_ID  marketplace identifierLive tailing accepts the same filtering parameters as the events query,
--filter and --resource. You can also pass in --limit to control
how many events from the past are shown before starting the live tail.
Live tailing supports all the same output modes (default table output,
--json and --json-pretty) as the events query does.
$ flex-cli events tail -m my-marketplace-dev
Starting live tail of events. Type <Ctrl>+C to quit.
Seq ID   Resource ID                           Event type                     Created at local time   Source           Actor
3471858  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:38 PM   marketplace-api  joe@example.com
3471859  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:53 PM   marketplace-api  joe@example.com
3471860  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:47:56 PM   marketplace-api  joe@example.com
3471863  5fce8728-0f15-46e4-8ee2-c4955e0cc079  availabilityException/created  2020-12-07 9:48:56 PM   marketplace-api  joe@example.com
3471864  5fce872f-4081-4ca7-a40d-6eb2b003dcc2  availabilityException/created  2020-12-07 9:49:03 PM   marketplace-api  joe@example.com
3471865  5fce8730-c750-4427-bc58-09f685cc0b03  availabilityException/created  2020-12-07 9:49:04 PM   marketplace-api  joe@example.com
3471866  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:49:11 PM   marketplace-api  joe@example.com
3471873  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:50:35 PM   marketplace-api  joe@example.com
3471875  5fce8536-61f5-4c85-8160-61b1799d256f  user/updated                   2020-12-07 9:50:52 PM   marketplace-api  joe@example.com
3471890  5fce86c7-e435-4047-ab3b-dc4fee02d51d  listing/updated                2020-12-07 9:53:15 PM   marketplace-api  joe@example.comSummary
Flex CLI gives you visibility into the events that happen in your marketplace. It supports querying events in a few different ways based on event types, affected resource or time. It also supports following events that happen in your marketlpace live.
Using Flex CLI to examine events is a great way to see what's happening in your marketplace and how the marketplace data has gotten to it's current state. Looking at the events using Flex CLI is also a great way to get started with planning how to build an integration that reacts to events as it allows you to see what kind of events happen when, and what's the data that's recorded for each event.
For more information about events, see the following resources:
- Events reference for a detailed description on how events work and how they are defined.
- Integration API reference for events about how to query events via the Integration API.
- Reacting to events how-to guide guide