def METHOD_NAME(self, annotation: Annotation):
    """
    Get the JSON presentation of an annotation.
    This representation does not contain any user specific information and
    has only the data applicable to all users. This does not blank content
    for moderated annotations.
    :param annotation: Annotation to present
    :return: A dict suitable for JSON serialisation
    """
    model = deepcopy(annotation.extra) or {}
    model.update(
        {
            "id": annotation.id,
            "created": utc_iso8601(annotation.created),
            "updated": utc_iso8601(annotation.updated),
            "user": annotation.userid,
            "uri": annotation.target_uri,
            "text": annotation.text or "",
            "tags": annotation.tags or [],
            "group": annotation.groupid,
            #  Convert our simple internal annotation storage format into the
            #  legacy complex permissions dict format that is still used in
            #  some places.
            "permissions": {
                "read": [self._get_read_permission(annotation)],
                "admin": [annotation.userid],
                "update": [annotation.userid],
                "delete": [annotation.userid],
            },
            "target": annotation.target,
            "document": DocumentJSONPresenter(annotation.document).asdict(),
            "links": self._links_service.get_all(annotation),
        }
    )
    model.update(user_info(self._user_service.fetch(annotation.userid)))
    if annotation.references:
        model["references"] = annotation.references
    return model