On April 11, 2022 Adobe announced the full release of the annotations
feature for Adobe Analytics.
The Analytics 2.0 Annotations APIs allow you to retrieve, update, or
create annotations programmatically through Adobe I/O. These APIs use
the same data and methods that Adobe uses inside the product UI.
More detailed API documentation and information can be found on developer.adobe.com.
The first version of our support in adobeanalyticsr includes functions
for retreiving annotations (aw_get_annotations()
) as well
as building them (annotation_build()
).
Getting Annotations
The basic function to get a dataframe of annotations from a specific
company is the function aw_get_annotations()
. There are 8
different arguments that can help you refine the annotations and
metadata returned from the API. In addition, there are 2 arguments,
“debug” and “company_id”, which which are not directly related to the
data.
The following is an explanation of the different arguments you can
use.
- “id” - Filter the results to one specific annotation by the
annotation id. If not used, a list of annotations will be returned
limited by the ‘limit’ and ‘page’ arguments.
- “expansion” - Obtain additional information around an annotation.
You can include multiple expansions using the ‘c()’ function. Expansion
options include the following:
- name: The name of the annotation.
- description The annotation’s description.
- dateRange The date range of the annotation.
- color: An enum representing the annotation’s color. Supported values
include STANDARD1 through STANDARD9. These correspond to these colors in
order: ‘blue’, ‘purple’, ‘green’, ‘orange’, ‘red’, ‘light green’,
‘pink’, ‘dark green’, and ‘yellow’.
- applyToAllReports: A boolean that determines if the annotation
applies to all report suites.
- scope: An object including the metrics and filters that the
annotation uses.
- createdDate: The date that the annotation was created.
- modifiedDate: The date that the annotation was last modified.
- modifiedById: The ID of the user who last modified the
annotation.
- tags: The tags applied to the annotation.
- shares: The shares applied to the annotation.
- approved: A boolean that determines if the annotation is approved by
an admin.
- favorite: A boolean that determines if the user has this annotation
favorited (starred).
- usageSummary: An object that shows where this annotation is
used.
- owner: An object showing the ID, name, and login of the user that
created the annotation.
- companyId: The login company ID of the annotation.
- reportSuiteName: The report suite’s friendly name.
- rsid: The report suite ID.
- “includeType” - Include additional segments not owned by the user.
Available values are all (default) and shared. The all option takes
precedence over “shared”.
- “locale” - A query string that returns strings localized by Adobe
into the desired language. Localization does not apply to user-defined
fields, such as annotation names.
- “filterByModifiedAfter” - An ISO 8601 date that returns only
annotations that were modified after the desired date. example datetime
format: ‘YYYY-MM-DDTHH:MM:SSZ’
- “filterByDateRange” - Two ISO 8601 dates separated by a forward
slash (/) that returns only annotations that fully reside within the
desired date range. example format: ‘MM:SSZ/YYYY-MM-DDTHH:MM:SSZ’
- “limit” - An integer that represents the number of results per page.
Default is 10
- “page” - An integer that represents which page to return results.
The first page is 0. The API supports up to 1000 pages
- “debug” - Include the output and input of the api call in the
console for debugging. Default is FALSE
- “company_id” - As with all API calls to Adobe Analytics, the Company
ID is required. If an environment variable called AW_COMPANY_ID exists
in .Renviron or elsewhere and no company_id argument is provided, then
the AW_COMPANY_ID value will be used. Use get_me to get a list of
available company_id values.
The basic function to pull a data set of 10 annotations can be done
like this:
annotes <- aw_get_annotations(limit = 10, expansion = c('name', 'description', 'scope'), debug = F, includeType = 'shared')
annotes$name
annotes[annotes$name == "Test Annotation", ]$lists$scope
Build a basic annotation
(jsonlite::fromJSON(ann))
$id
[1] "626f451ac7bee35c05060753"
ann <- annotation_build("A new annotation",
"the description can be long or short, depending on what you need",
color = 'orange',
filter_id = list('page', 's300003965_5eab136b34d05f0ff1c318ff'),
filter_compType = list('d', 's'),
filter_verb = list('exists'),
filter_dimType = list('string'),
debug = T)
LS0tCnRpdGxlOiAiQW5ub3RhdGlvbnMiCmF1dGhvcjogIkJlbiBXb29kYXJkIgpkYXRlOiAnMjAyMi0wNC0xMicKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpsaWJyYXJ5KGFkb2JlYW5hbHl0aWNzcikKYXdfYXV0aCgnb2F1dGgnKQpgYGAKCk9uIEFwcmlsIDExLCAyMDIyIEFkb2JlIGFubm91bmNlZCB0aGUgZnVsbCByZWxlYXNlIG9mIHRoZSBhbm5vdGF0aW9ucyBmZWF0dXJlIGZvciBBZG9iZSBBbmFseXRpY3MuICAKCj5UaGUgQW5hbHl0aWNzIDIuMCBBbm5vdGF0aW9ucyBBUElzIGFsbG93IHlvdSB0byByZXRyaWV2ZSwgdXBkYXRlLCBvciBjcmVhdGUgYW5ub3RhdGlvbnMgcHJvZ3JhbW1hdGljYWxseSB0aHJvdWdoIEFkb2JlIEkvTy4gVGhlc2UgQVBJcyB1c2UgdGhlIHNhbWUgZGF0YSBhbmQgbWV0aG9kcyB0aGF0IEFkb2JlIHVzZXMgaW5zaWRlIHRoZSBwcm9kdWN0IFVJLgoKTW9yZSBkZXRhaWxlZCBBUEkgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIG9uIFtkZXZlbG9wZXIuYWRvYmUuY29tXShodHRwczovL2RldmVsb3Blci5hZG9iZS5jb20vYW5hbHl0aWNzLWFwaXMvZG9jcy8yLjAvZ3VpZGVzL2VuZHBvaW50cy9hbm5vdGF0aW9ucy8pLiBUaGUgZmlyc3QgdmVyc2lvbiBvZiBvdXIgc3VwcG9ydCBpbiBhZG9iZWFuYWx5dGljc3IgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZXRyZWl2aW5nIGFubm90YXRpb25zIChgYXdfZ2V0X2Fubm90YXRpb25zKClgKSBhcyB3ZWxsIGFzIGJ1aWxkaW5nIHRoZW0gKGBhbm5vdGF0aW9uX2J1aWxkKClgKS4KCiMjIEdldHRpbmcgQW5ub3RhdGlvbnMKClRoZSBiYXNpYyBmdW5jdGlvbiB0byBnZXQgYSBkYXRhZnJhbWUgb2YgYW5ub3RhdGlvbnMgZnJvbSBhIHNwZWNpZmljIGNvbXBhbnkgaXMgdGhlIGZ1bmN0aW9uIGBhd19nZXRfYW5ub3RhdGlvbnMoKWAuICBUaGVyZSBhcmUgOCBkaWZmZXJlbnQgYXJndW1lbnRzIHRoYXQgY2FuIGhlbHAgeW91IHJlZmluZSB0aGUgYW5ub3RhdGlvbnMgYW5kIG1ldGFkYXRhIHJldHVybmVkIGZyb20gdGhlIEFQSS4gSW4gYWRkaXRpb24sIHRoZXJlIGFyZSAyIGFyZ3VtZW50cywgImRlYnVnIiBhbmQgImNvbXBhbnlfaWQiLCB3aGljaCB3aGljaCBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRhdGEuCgpUaGUgZm9sbG93aW5nIGlzIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgYXJndW1lbnRzIHlvdSBjYW4gdXNlLgoKMS4gImlkIgktIEZpbHRlciB0aGUgcmVzdWx0cyB0byBvbmUgc3BlY2lmaWMgYW5ub3RhdGlvbiBieSB0aGUgYW5ub3RhdGlvbiBpZC4gSWYgbm90IHVzZWQsIGEgbGlzdCBvZiBhbm5vdGF0aW9ucyB3aWxsIGJlIHJldHVybmVkIGxpbWl0ZWQgYnkgdGhlIOKAmGxpbWl04oCZIGFuZCDigJhwYWdl4oCZIGFyZ3VtZW50cy4KMi4gImV4cGFuc2lvbiIgLSBPYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhcm91bmQgYW4gYW5ub3RhdGlvbi4gWW91IGNhbiBpbmNsdWRlIG11bHRpcGxlIGV4cGFuc2lvbnMgdXNpbmcgdGhlIOKAmGMoKeKAmSBmdW5jdGlvbi4gRXhwYW5zaW9uIG9wdGlvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgogICAgICAtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBhbm5vdGF0aW9uLgogICAgICAtIGRlc2NyaXB0aW9uIFRoZSBhbm5vdGF0aW9u4oCZcyBkZXNjcmlwdGlvbi4KICAgICAgLSBkYXRlUmFuZ2UgVGhlIGRhdGUgcmFuZ2Ugb2YgdGhlIGFubm90YXRpb24uCiAgICAgIC0gY29sb3I6IEFuIGVudW0gcmVwcmVzZW50aW5nIHRoZSBhbm5vdGF0aW9u4oCZcyBjb2xvci4gU3VwcG9ydGVkIHZhbHVlcyBpbmNsdWRlIFNUQU5EQVJEMSAgIHRocm91Z2ggU1RBTkRBUkQ5LiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZXNlIGNvbG9ycyBpbiBvcmRlcjogJ2JsdWUnLCAncHVycGxlJywgJ2dyZWVuJywgJ29yYW5nZScsICdyZWQnLCAnbGlnaHQgZ3JlZW4nLCAncGluaycsICdkYXJrIGdyZWVuJywgYW5kICd5ZWxsb3cnLgogICAgICAtIGFwcGx5VG9BbGxSZXBvcnRzOiBBIGJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBhbm5vdGF0aW9uIGFwcGxpZXMgdG8gYWxsIHJlcG9ydCBzdWl0ZXMuCiAgICAgIC0gc2NvcGU6IEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIG1ldHJpY3MgYW5kIGZpbHRlcnMgdGhhdCB0aGUgYW5ub3RhdGlvbiB1c2VzLgogICAgICAtIGNyZWF0ZWREYXRlOiBUaGUgZGF0ZSB0aGF0IHRoZSBhbm5vdGF0aW9uIHdhcyBjcmVhdGVkLgogICAgICAtIG1vZGlmaWVkRGF0ZTogVGhlIGRhdGUgdGhhdCB0aGUgYW5ub3RhdGlvbiB3YXMgbGFzdCBtb2RpZmllZC4KICAgICAgLSBtb2RpZmllZEJ5SWQ6IFRoZSBJRCBvZiB0aGUgdXNlciB3aG8gbGFzdCBtb2RpZmllZCB0aGUgYW5ub3RhdGlvbi4KICAgICAgLSB0YWdzOiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoZSBhbm5vdGF0aW9uLgogICAgICAtIHNoYXJlczogVGhlIHNoYXJlcyBhcHBsaWVkIHRvIHRoZSBhbm5vdGF0aW9uLgogICAgICAtIGFwcHJvdmVkOiBBIGJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBhbm5vdGF0aW9uIGlzIGFwcHJvdmVkIGJ5IGFuIGFkbWluLgogICAgICAtIGZhdm9yaXRlOiBBIGJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSB1c2VyIGhhcyB0aGlzIGFubm90YXRpb24gZmF2b3JpdGVkIChzdGFycmVkKS4KICAgICAgLSB1c2FnZVN1bW1hcnk6IEFuIG9iamVjdCB0aGF0IHNob3dzIHdoZXJlIHRoaXMgYW5ub3RhdGlvbiBpcyB1c2VkLgogICAgICAtIG93bmVyOiBBbiBvYmplY3Qgc2hvd2luZyB0aGUgSUQsIG5hbWUsIGFuZCBsb2dpbiBvZiB0aGUgdXNlciB0aGF0IGNyZWF0ZWQgdGhlIGFubm90YXRpb24uCiAgICAgIC0gY29tcGFueUlkOiBUaGUgbG9naW4gY29tcGFueSBJRCBvZiB0aGUgYW5ub3RhdGlvbi4KICAgICAgLSByZXBvcnRTdWl0ZU5hbWU6IFRoZSByZXBvcnQgc3VpdGXigJlzIGZyaWVuZGx5IG5hbWUuCiAgICAgIC0gcnNpZDogVGhlIHJlcG9ydCBzdWl0ZSBJRC4KMy4gImluY2x1ZGVUeXBlIiAtIEluY2x1ZGUgYWRkaXRpb25hbCBzZWdtZW50cyBub3Qgb3duZWQgYnkgdGhlIHVzZXIuIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGFsbCAoZGVmYXVsdCkgYW5kIHNoYXJlZC4gVGhlIGFsbCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyICJzaGFyZWQiLgo0LiAibG9jYWxlIgktIEEgcXVlcnkgc3RyaW5nIHRoYXQgcmV0dXJucyBzdHJpbmdzIGxvY2FsaXplZCBieSBBZG9iZSBpbnRvIHRoZSBkZXNpcmVkIGxhbmd1YWdlLiBMb2NhbGl6YXRpb24gZG9lcyBub3QgYXBwbHkgdG8gdXNlci1kZWZpbmVkIGZpZWxkcywgc3VjaCBhcyBhbm5vdGF0aW9uIG5hbWVzLiAKNS4gImZpbHRlckJ5TW9kaWZpZWRBZnRlciIgLSBBbiBJU08gODYwMSBkYXRlIHRoYXQgcmV0dXJucyBvbmx5IGFubm90YXRpb25zIHRoYXQgd2VyZSBtb2RpZmllZCBhZnRlciB0aGUgZGVzaXJlZCBkYXRlLiBleGFtcGxlIGRhdGV0aW1lIGZvcm1hdDog4oCYWVlZWS1NTS1ERFRISDpNTTpTU1rigJkKNi4gImZpbHRlckJ5RGF0ZVJhbmdlIiAtIFR3byBJU08gODYwMSBkYXRlcyBzZXBhcmF0ZWQgYnkgYSBmb3J3YXJkIHNsYXNoICgvKSB0aGF0IHJldHVybnMgb25seSBhbm5vdGF0aW9ucyB0aGF0IGZ1bGx5IHJlc2lkZSB3aXRoaW4gdGhlIGRlc2lyZWQgZGF0ZSByYW5nZS4gZXhhbXBsZSBmb3JtYXQ6IOKAmE1NOlNTWi9ZWVlZLU1NLUREVEhIOk1NOlNTWuKAmQo3LiAibGltaXQiIC0gQW4gaW50ZWdlciB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByZXN1bHRzIHBlciBwYWdlLiBEZWZhdWx0IGlzIDEwCjguICJwYWdlIgktIEFuIGludGVnZXIgdGhhdCByZXByZXNlbnRzIHdoaWNoIHBhZ2UgdG8gcmV0dXJuIHJlc3VsdHMuIFRoZSBmaXJzdCBwYWdlIGlzIDAuIFRoZSBBUEkgc3VwcG9ydHMgdXAgdG8gMTAwMCBwYWdlcwo5LiAiZGVidWciCS0gSW5jbHVkZSB0aGUgb3V0cHV0IGFuZCBpbnB1dCBvZiB0aGUgYXBpIGNhbGwgaW4gdGhlIGNvbnNvbGUgZm9yIGRlYnVnZ2luZy4gRGVmYXVsdCBpcyBGQUxTRQoxMC4gImNvbXBhbnlfaWQiIC0gQXMgd2l0aCBhbGwgQVBJIGNhbGxzIHRvIEFkb2JlIEFuYWx5dGljcywgdGhlIENvbXBhbnkgSUQgaXMgcmVxdWlyZWQuICBJZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgQVdfQ09NUEFOWV9JRCBleGlzdHMgaW4gLlJlbnZpcm9uIG9yIGVsc2V3aGVyZSBhbmQgbm8gY29tcGFueV9pZCBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgQVdfQ09NUEFOWV9JRCB2YWx1ZSB3aWxsIGJlIHVzZWQuIFVzZSBnZXRfbWUgdG8gZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgY29tcGFueV9pZCB2YWx1ZXMuCgpUaGUgYmFzaWMgZnVuY3Rpb24gdG8gcHVsbCBhIGRhdGEgc2V0IG9mIDEwIGFubm90YXRpb25zIGNhbiBiZSBkb25lIGxpa2UgdGhpczoKYGBge3IgZWNobz1UfQphbm5vdGVzIDwtIGF3X2dldF9hbm5vdGF0aW9ucyhsaW1pdCA9IDEwLCBleHBhbnNpb24gPSBjKCduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ3Njb3BlJyksIGRlYnVnID0gRiwgaW5jbHVkZVR5cGUgPSAnc2hhcmVkJykKYW5ub3RlcyRuYW1lCmFubm90ZXNbYW5ub3RlcyRuYW1lID09ICJUZXN0IEFubm90YXRpb24iLCBdJGxpc3RzJHNjb3BlCmBgYAoKIyMgQnVpbGQgYSBiYXNpYyBhbm5vdGF0aW9uCmBgYHtyfQphbm4gPC0gYW5ub3RhdGlvbl9idWlsZCgiQSBkYXJrIGdyZWVuIGJhc2ljIGFubm90YXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBpcyBhIGRlc2NyaXB0aW9uIHRoYXQgc2hvdWxkIGluY2x1ZGUgdGhlIGJhc2ljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgYW5ub3RhdGlvbnMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnZGFyayBncmVlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVfcmFuZ2UgPSBjKCcyMDIyLTAxLTAxJywgJzIwMjItMDMtMDEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBGKQphbm4KCihqc29ubGl0ZTo6ZnJvbUpTT04oYW5uKSkKYGBgCgoKYGBge3J9CmFubiA8LSBhbm5vdGF0aW9uX2J1aWxkKCJBIG5ldyBhbm5vdGF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgbG9uZyBvciBzaG9ydCwgZGVwZW5kaW5nIG9uIHdoYXQgeW91IG5lZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICdvcmFuZ2UnLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2lkID0gbGlzdCgncGFnZScsICdzMzAwMDAzOTY1XzVlYWIxMzZiMzRkMDVmMGZmMWMzMThmZicpLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NvbXBUeXBlID0gbGlzdCgnZCcsICdzJyksIAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfdmVyYiA9IGxpc3QoJ2V4aXN0cycpLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2RpbVR5cGUgPSBsaXN0KCdzdHJpbmcnKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBUKQpgYGAKCg==