Skip to main content

Verified against AS2 Core & Vocabulary (W3C REC 2017), the published AS2 JSON-LD context, ActivityPub REC, Mastodon v4.7.3 source (context_helper.rb, account.rb, json_ld_helper.rb) on 2026-10-15.

Properties Reference

A reference for the properties you will meet most often. The full, normative list is the Activity Vocabulary §4. Actor properties such as inbox, outbox and preferredUsername are defined by ActivityPub §4.1, not AS2, and extensions are marked as such.

Core Properties​

@context​

JSON-LD context definition.

{
"@context": "https://www.w3.org/ns/activitystreams"
}

Can be an array for multiple contexts:

{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"toot": "http://joinmastodon.org/ns#",
"sensitive": "as:sensitive"
}
]
}

type​

The object type(s) — a string or an array; consumers must handle both.

{ "type": "Note" }
{ "type": ["Note", "http://schema.org/CreativeWork"] }

id​

Globally unique identifier (URI).

{ "id": "https://example.com/notes/12345" }

Object Properties​

name​

Human-readable name/title.

{ "name": "My Blog Post" }

nameMap​

Localized names.

{
"nameMap": {
"en": "Hello",
"de": "Hallo",
"ja": "こんにちは"
}
}

content​

Text content (typically HTML).

{ "content": "<p>Hello, world!</p>" }

contentMap​

Localized content.

{
"contentMap": {
"en": "<p>Hello, world!</p>",
"es": "<p>¡Hola, mundo!</p>"
}
}

summary​

Brief description or content warning.

{ "summary": "Discussion of spoilers" }

mediaType​

MIME type of content.

{ "mediaType": "text/html" }
{ "mediaType": "text/markdown" }

source​

Original source format.

{
"content": "<p><strong>Hello</strong></p>",
"source": {
"content": "**Hello**",
"mediaType": "text/markdown"
}
}

Temporal Properties​

published​

When the object was created.

{ "published": "2024-01-15T10:30:00Z" }

updated​

When the object was last modified.

{ "updated": "2024-01-15T14:45:00Z" }

startTime​

Start time for events or activities.

{ "startTime": "2024-02-01T18:00:00Z" }

endTime​

End time for events.

{ "endTime": "2024-02-01T21:00:00Z" }

duration​

Duration in ISO 8601 format.

{ "duration": "PT2H30M" }

Attribution Properties​

attributedTo​

Who created the object.

{ "attributedTo": "https://example.com/users/alice" }

Multiple authors:

{
"attributedTo": [
"https://example.com/users/alice",
"https://example.com/users/bob"
]
}

generator​

Application that created the object.

{
"generator": {
"type": "Application",
"name": "MyApp",
"url": "https://myapp.example"
}
}

Addressing Properties​

to​

Primary recipients. Visible to everyone who can see the object; addressing the special Public collection makes the object public.

{ "to": ["https://www.w3.org/ns/activitystreams#Public"] }

cc​

Secondary recipients, also visible to everyone who can see the object.

{ "cc": ["https://example.com/users/alice/followers"] }

bto​

Blind primary recipients. The sending server MUST remove bto and bcc before delivery (AP §6).

{ "bto": ["https://example.com/users/admin"] }

bcc​

Blind secondary recipients (stripped before delivery, like bto).

{ "bcc": ["https://example.com/users/moderator"] }

audience​

Target audience.

{ "audience": "https://lemmy.example/c/technology" }

Relationship Properties​

inReplyTo​

What this object is replying to.

{ "inReplyTo": "https://example.com/notes/123" }

replies​

Collection of replies.

{
"replies": {
"type": "Collection",
"totalItems": 5,
"first": "https://example.com/notes/123/replies?page=1"
}
}

tag​

Associated tags (mentions, hashtags, emoji).

{
"tag": [
{ "type": "Mention", "href": "https://example.com/users/bob", "name": "@bob" },
{ "type": "Hashtag", "href": "https://example.com/tags/fedi", "name": "#fedi" }
]
}

attachment​

Attached media or documents.

{
"attachment": [
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://example.com/image.jpg"
}
]
}

Activity Properties​

actor​

Who performed the activity.

{ "actor": "https://example.com/users/alice" }

object​

What the activity is about.

{ "object": "https://example.com/notes/123" }

target​

Indirect object/destination.

{
"type": "Add",
"object": "https://example.com/notes/123",
"target": "https://example.com/collections/favorites"
}

result​

Outcome of the activity.

{
"type": "Create",
"result": {
"type": "Note",
"id": "https://example.com/notes/456"
}
}

origin​

Where the object came from — "the actor has moved object from origin to target" (AS2 Vocab: Move).

{
"type": "Move",
"object": "http://example.org/posts/1",
"origin": { "type": "Collection", "name": "List A" },
"target": { "type": "Collection", "name": "List B" }
}

Account migration (Mastodon) uses Move differently: object is the old account and target the new one, with no origin.

instrument​

Tool used to perform the activity.

{
"instrument": {
"type": "Application",
"name": "Mobile App"
}
}

Collection Properties​

totalItems​

Total number of items.

{ "totalItems": 150 }

items​

Unordered items.

{ "items": ["https://example.com/1", "https://example.com/2"] }

orderedItems​

Ordered items.

{ "orderedItems": ["https://example.com/3", "https://example.com/2", "https://example.com/1"] }

first​

First page of collection.

{ "first": "https://example.com/collection?page=1" }

last​

Last page of collection.

{ "last": "https://example.com/collection?page=10" }

current​

Current page of collection.

{ "current": "https://example.com/collection?page=5" }

next / prev​

Pagination links.

{
"next": "https://example.com/collection?page=6",
"prev": "https://example.com/collection?page=4"
}

partOf​

Parent collection for pages.

{ "partOf": "https://example.com/collection" }

Actor Properties​

inbox​

URL to receive activities.

{ "inbox": "https://example.com/users/alice/inbox" }

outbox​

URL listing published activities.

{ "outbox": "https://example.com/users/alice/outbox" }

following​

Following collection.

{ "following": "https://example.com/users/alice/following" }

followers​

Followers collection.

{ "followers": "https://example.com/users/alice/followers" }

liked​

Liked items collection.

{ "liked": "https://example.com/users/alice/liked" }

preferredUsername​

The @handle part. ActivityPub only calls it "a short username… with no uniqueness guarantees" (AP §4.1); Mastodon expects ASCII letters, digits and _, with . or - only between them (USERNAME_RE in account.rb), so stick to that for interop.

{ "preferredUsername": "alice" }

endpoints​

Service endpoints.

{
"endpoints": {
"sharedInbox": "https://example.com/inbox"
}
}

href​

Target URL.

{ "href": "https://example.com/resource" }

rel​

Link relation.

{ "rel": "self" }

hreflang​

Target language.

{ "hreflang": "en" }

height / width​

Dimensions for media.

{ "height": 1080, "width": 1920 }

Media Properties​

url​

Resource URL(s).

{ "url": "https://example.com/image.jpg" }

Multiple URLs:

{
"url": [
{ "type": "Link", "href": "https://example.com/image.jpg", "mediaType": "image/jpeg" },
{ "type": "Link", "href": "https://example.com/image.webp", "mediaType": "image/webp" }
]
}

icon​

Avatar/icon image.

{
"icon": {
"type": "Image",
"mediaType": "image/png",
"url": "https://example.com/avatar.png"
}
}

image​

Header/banner image.

{
"image": {
"type": "Image",
"mediaType": "image/jpeg",
"url": "https://example.com/header.jpg"
}
}

preview​

Preview of the object.

{
"preview": {
"type": "Image",
"url": "https://example.com/thumbnail.jpg"
}
}

Location Properties​

location​

Physical location.

{
"location": {
"type": "Place",
"name": "San Francisco",
"latitude": 37.7749,
"longitude": -122.4194
}
}

latitude / longitude​

Geographic coordinates.

{ "latitude": 37.7749, "longitude": -122.4194 }

altitude / accuracy / radius​

Location precision. accuracy is a percentage (0–100); radius is a distance in units (metres by default).

{ "altitude": 100, "accuracy": 94.0, "radius": 50 }

Special Properties​

sensitive​

Content contains sensitive material. This is a fediverse extension (mapped as as:sensitive), not part of AS2. In Mastodon the content-warning text goes in summary; sensitive is the boolean.

{ "sensitive": true }

formerType​

Original type of deleted object.

{
"type": "Tombstone",
"formerType": "Note",
"deleted": "2024-01-15T14:00:00Z"
}

deleted​

When the object was deleted.

{ "deleted": "2024-01-15T14:00:00Z" }

Mastodon Extensions​

None of these are AS2 core. manuallyApprovesFollowers and movedTo map to as: terms, alsoKnownAs is in the published AS2 context, and discoverable and featured are in Mastodon's toot: namespace (context_helper.rb).

discoverable​

Show in directory.

{ "discoverable": true }

manuallyApprovesFollowers​

Locked account.

{ "manuallyApprovesFollowers": true }

Pinned posts collection.

{ "featured": "https://example.com/users/alice/collections/featured" }

movedTo / alsoKnownAs​

Account migration. movedTo is set on the old account, alsoKnownAs on the new one (listing the old account) — they appear on different actors.

// Old account (https://old.example/users/alice)
{ "movedTo": "https://new.example/users/alice" }

// New account (https://new.example/users/alice)
{ "alsoKnownAs": ["https://old.example/users/alice"] }

publicKey​

Public key for HTTP Signatures, from the W3C Security Vocabulary (not a Mastodon invention). Newer implementations can also publish keys as Multikey entries in assertionMethod (FEP-521a).

{
"publicKey": {
"id": "https://example.com/users/alice#main-key",
"owner": "https://example.com/users/alice",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
}
}

Property Quick Reference​

PropertyApplies ToTypeRequired
idAllURIYes*
typeAllString/ArrayYes
actorActivityURI/ObjectYes (in practice)
objectActivityURI/ObjectYes, except IntransitiveActivity
inboxActorURIYes
outboxActorURIYes
contentObjectStringCommon
publishedObjectDateTimeCommon
toObject/ActivityURI/Object, one or manyCommon
ccObject/ActivityURI/Object, one or manyCommon

*ActivityPub requires id except on intentionally transient objects (AP §3.1).

Next Steps​