Basket Synchronisation¶
This documents what data we synchronize with Basket and how.
Triggers¶
Every time a field that we’re meant to synchronize on an object changes, a full sync of the object is triggered.
A consequence of this is, since the relation between an addon and an user is part of the add-on object, when a new user is added as an author, or an existing author is removed from an add-on, that triggers a full sync of the add-on, including user account information for all its authors.
Objects¶
We’re synchronizing 2 types of objects:
User Accounts
Add-ons
User Accounts¶
Note
Newsletter opt-in information is not stored by AMO, and therefore not synchronized with the
rest. It’s sent to basket separately directly whenever it changes, through basket’s
Newsletter API subscribe
and
unsubscribe
endpoints.
- POST https://basket.mozilla.org/amo-sync/userprofile/¶
- Request JSON Object:
id (int) – The numeric user id.
deleted (boolean) – Is the account deleted.
display_name (string|null) – The name chosen by the user.
homepage (string|null) – The user’s website.
fxa_id|null (string) – The user FxA Identifier
last_login (string|null) – The date of the last successful log in to the website.
location (string|null) – The location of the user.
Add-ons¶
- POST https://basket.mozilla.org/amo-sync/addon/¶
- Request JSON Object:
id (int) – The add-on id on AMO.
authors (array) – Array holding information about the authors for the add-on.
guid (string) – The add-on extension identifier.
name (string) – The add-on name (in add-on’s default locale)
default_locale (string) – The add-on default locale for translations.
slug (string) – The add-on slug.
type (string) – The add-on type.
status (string) – The add-on status.
is_disabled (boolean) – Whether the add-on is disabled or not.
latest_unlisted_version (object|null) – Object holding the latest unlisted version of the add-on. Only the
'id
,compatibility
,is_strict_compatibility_enabled
andversion
fields are present.current_version (object) – Object holding the current version of the add-on. Only the
'id
,compatibility
,is_strict_compatibility_enabled
andversion
fields are present.last_updated (string) – The date of the last time the add-on was updated by its developer(s).
ratings (object) – Object holding ratings summary information about the add-on.
ratings.count (int) – The total number of user ratings for the add-on.
ratings.text_count (int) – The number of user ratings with review text for the add-on.
ratings.average (float) – The average user rating for the add-on.
ratings.bayesian_average (float) – The bayesian average user rating for the add-on.
categories (object) – Object holding the categories the add-on belongs to.
categories[app_name] (array) – Array holding the category slugs the add-on belongs to for a given add-on application, referenced by its
app_name
. (Combine with the add-ontype
to determine the name of the category).average_daily_users (int) – The average number of users for the add-on.
is_recommended (boolean) – Whether the add-on is recommended by Mozilla or not.
Example data¶
Here is an example of the full json that would be sent for an add-on:
{
"authors": [
{
"id": 11263,
"deleted": false,
"display_name": "qwerty",
"fxa_id": "1209e9bf1eeb59d0934579b6db0ccad1",
"homepage": "",
"last_login": "2019-08-06T10:39:44Z",
"location": ""
}
],
"average_daily_users": 0,
"categories": {
"firefox": [
"games-entertainment"
]
},
"current_version": {
"id": 35900,
"compatibility": {
"firefox": {
"min": "48.0",
"max": "*"
}
},
"is_strict_compatibility_enabled": false,
"version": "2.0"
},
"default_locale": "en-US",
"guid": "{85ee4a2a-51b6-4f5e-a99c-6d9abcf6782d}",
"id": 35896,
"is_disabled": false,
"is_recommended": false,
"last_updated": "2019-06-26T11:38:13Z",
"latest_unlisted_version": {
"id": 35899,
"compatibility": {
"firefox": {
"min": "48.0",
"max": "*"
}
},
"is_strict_compatibility_enabled": false,
"version": "1.0"
},
"name": "Ibird Jelewt Boartrica",
"ratings": {
"average": 4.1,
"bayesian_average": 4.2,
"count": 43,
"text_count": 40
},
"slug": "ibird-jelewt-boartrica",
"status": "nominated",
"type": "extension"
}
Here is an example of the full json that would be sent for an user:
{
"id": 11263,
"deleted": false,
"display_name": "serses",
"email": "mozilla@virgule.net",
"homepage": "",
"last_login": "2019-08-06T10:39:44Z",
"location": ""
}