Looks good. Might be interesting to use.
Not to be too pedantic, but does the “target” need a “type” : “Collection” on it so that the activity can be fully translated to “Krista added a photo to an album”.
The underlying question is if the activity will spell out exactly what words should be used to translate it from JSON -> English or would the system need to make some assumptions based on the context: Is the word “album” is expected to be derived from the “id” or translated from the “type” of the target? In the same way “photo” is either derived from the “id” or a contextually specific translation of the “type” : “Image”.
And any Java implementations yet?