ActivityPub Unofficial JSON Schema

Added on Nov. 6, 2025Managed by lisa

ActivityPub (MAIN)

{
  "$id": "http://www.w3.org/ns/activitystreams/ActivityPub.json",
  "title": "An INOFFICIAL PROPOSAL: JSON SCHEMAS for ActivityPub",
  "description": "ISSUES EXIST: https://github.com/w3c/activitystreams/issues/ e.g. 436, 437, 443",
  "$comment": "TODO - if content but NO mediaType then {\"contentMediaType\": \"text/html\"}",

  "allOf": [
    {
      "type": "object",
      "required": ["type"]
    },
    {
      "if": { "$ref": "Collection.json#/definitions/byTypeRef" },
      "then": { "$ref": "Collection.json#" }
    }, {
      "if": { "$ref": "OrderedCollection.json#/definitions/byTypeRef" },
      "then": { "$ref": "OrderedCollection.json#" }
    }, {
      "if": { "$ref": "CollectionPage.json#/definitions/byTypeRef" },
      "then": { "$ref": "CollectionPage.json#" }
    }, {
      "if": { "$ref": "OrderedCollectionPage.json#/definitions/byTypeRef" },
      "then": { "$ref": "OrderedCollectionPage.json#" }
    },

    {
      "if": { "$ref": "Link.json#/definitions/byTypeRef" },
      "then": { "$ref": "Link.json#" }
    },
    {
      "if": { "$ref": "Mention.json#/definitions/byTypeRef" },
      "then": { "$ref": "Mention.json#" }
    },

    {
      "if": { "$ref": "Object.json#/definitions/byTypeRef" },
      "then": { "$ref": "Object.json#" }
    },
    {
      "if": { "$ref": "Article.json#/definitions/byTypeRef" },
      "then": { "$ref": "Article.json#" }
    }, {
      "if": { "$ref": "Audio.json#/definitions/byTypeRef" },
      "then": { "$ref": "Audio.json#" }
    }, {
      "if": { "$ref": "Document.json#/definitions/byTypeRef" },
      "then": { "$ref": "Document.json#" }
    }, {
      "if": { "$ref": "Event.json#/definitions/byTypeRef" },
      "then": { "$ref": "Event.json#" }
    }, {
      "if": { "$ref": "Image.json#/definitions/byTypeRef" },
      "then": { "$ref": "Image.json#" }
    }, {
      "if": { "$ref": "Note.json#/definitions/byTypeRef" },
      "then": { "$ref": "Note.json#" }
    }, {
      "if": { "$ref": "Page.json#/definitions/byTypeRef" },
      "then": { "$ref": "Page.json#" }
    }, {
      "if": { "$ref": "Place.json#/definitions/byTypeRef" },
      "then": { "$ref": "Place.json#" }
    }, {
      "if": { "$ref": "Profile.json#/definitions/byTypeRef" },
      "then": { "$ref": "Profile.json#" }
    }, {
      "if": { "$ref": "Relationship.json#/definitions/byTypeRef" },
      "then": { "$ref": "Relationship.json#" }
    }, {
      "if": { "$ref": "Tombstone.json#/definitions/byTypeRef" },
      "then": { "$ref": "Tombstone.json#" }
    }, {
      "if": { "$ref": "Video.json#/definitions/byTypeRef" },
      "then": { "$ref": "Video.json#" }
    },

    {
      "if": { "$ref": "Activity.json#/definitions/byTypeRef" },
      "then": { "$ref": "Activity.json#" }
    },
    {
      "if": { "$ref": "Accept.json#/definitions/byTypeRef" },
      "then": { "$ref": "Accept.json#" }
    }, {
      "if": { "$ref": "Add.json#/definitions/byTypeRef" },
      "then": { "$ref": "Add.json#" }
    }, {
      "if": { "$ref": "Announce.json#/definitions/byTypeRef" },
      "then": { "$ref": "Announce.json#" }
    }, {
      "if": { "$ref": "Arrive.json#/definitions/byTypeRef" },
      "then": { "$ref": "Arrive.json#" }
    }, {
      "if": { "$ref": "Block.json#/definitions/byTypeRef" },
      "then": { "$ref": "Block.json#" }
    }, {
      "if": { "$ref": "Create.json#/definitions/byTypeRef" },
      "then": { "$ref": "Create.json#" }
    }, {
      "if": { "$ref": "Delete.json#/definitions/byTypeRef" },
      "then": { "$ref": "Delete.json#" }
    }, {
      "if": { "$ref": "Dislike.json#/definitions/byTypeRef" },
      "then": { "$ref": "Dislike.json#" }
    }, {
      "if": { "$ref": "Flag.json#/definitions/byTypeRef" },
      "then": { "$ref": "Flag.json#" }
    }, {
      "if": { "$ref": "Follow.json#/definitions/byTypeRef" },
      "then": { "$ref": "Follow.json#" }
    }, {
      "if": { "$ref": "Ignore.json#/definitions/byTypeRef" },
      "then": { "$ref": "Ignore.json#" }
    }, {
      "if": { "$ref": "Invite.json#/definitions/byTypeRef" },
      "then": { "$ref": "Invite.json#" }
    }, {
      "if": { "$ref": "Join.json#/definitions/byTypeRef" },
      "then": { "$ref": "Join.json#" }
    }, {
      "if": { "$ref": "Leave.json#/definitions/byTypeRef" },
      "then": { "$ref": "Leave.json#" }
    }, {
      "if": { "$ref": "Like.json#/definitions/byTypeRef" },
      "then": { "$ref": "Like.json#" }
    }, {
      "if": { "$ref": "Listen.json#/definitions/byTypeRef" },
      "then": { "$ref": "Listen.json#" }
    }, {
      "if": { "$ref": "Move.json#/definitions/byTypeRef" },
      "then": { "$ref": "Move.json#" }
    }, {
      "if": { "$ref": "Offer.json#/definitions/byTypeRef" },
      "then": { "$ref": "Offer.json#" }
    }, {
      "if": { "$ref": "Question.json#/definitions/byTypeRef" },
      "then": { "$ref": "Question.json#" }
    }, {
      "if": { "$ref": "Read.json#/definitions/byTypeRef" },
      "then": { "$ref": "Read.json#" }
    }, {
      "if": { "$ref": "Reject.json#/definitions/byTypeRef" },
      "then": { "$ref": "Reject.json#" }
    }, {
      "if": { "$ref": "Remove.json#/definitions/byTypeRef" },
      "then": { "$ref": "Remove.json#" }
    }, {
      "if": { "$ref": "TentativeAccept.json#/definitions/byTypeRef" },
      "then": { "$ref": "TentativeAccept.json#" }
    }, {
      "if": { "$ref": "TentativeReject.json#/definitions/byTypeRef" },
      "then": { "$ref": "TentativeReject.json#" }
    }, {
      "if": { "$ref": "Travel.json#/definitions/byTypeRef" },
      "then": { "$ref": "Travel.json#" }
    }, {
      "if": { "$ref": "Undo.json#/definitions/byTypeRef" },
      "then": { "$ref": "Undo.json#" }
    }, {
      "if": { "$ref": "Update.json#/definitions/byTypeRef" },
      "then": { "$ref": "Update.json#" }
    }, {
      "if": { "$ref": "View.json#/definitions/byTypeRef" },
      "then": { "$ref": "View.json#" }
    },

    {
      "if": { "$ref": "Actor.json#/definitions/byTypeRef" },
      "then": { "$ref": "Actor.json#" }
    },
    {
      "if": { "$ref": "Application.json#/definitions/byTypeRef" },
      "then": { "$ref": "Application.json#" }
    }, {
      "if": { "$ref": "Group.json#/definitions/byTypeRef" },
      "then": { "$ref": "Group.json#" }
    }, {
      "if": { "$ref": "Organization.json#/definitions/byTypeRef" },
      "then": { "$ref": "Organization.json#" }
    }, {
      "if": { "$ref": "Person.json#/definitions/byTypeRef" },
      "then": { "$ref": "Person.json#" }
    }, {
      "if": { "$ref": "Service.json#/definitions/byTypeRef" },
      "then": { "$ref": "Service.json#" }
    }
  ],

  "definitions": {
    "possibleRef": {
			"oneOf": [
				{ "$ref": "#" },
        { "$ref": "Link.json#" },
				{
					"type": "string",
					"format": "uri",
					"links": [{
						"rel": "full",
						"href": "{+$}"
					}]
				}
			]
		},
    "possibleRefArray": {
      "oneOf": [
        { "$ref": "#/definitions/possibleRef" },
        {
          "type": "array",
          "items": { "$ref": "#/definitions/possibleRef" }
        }
      ]
    },

    "objectTypes": {
      "enum": [
        "Article", "Audio", "Document", "Event", "Image", "Note", "Page", "Place",
        "Profile", "Relationship", "Tombstone", "Video", "Object"
      ]
    },
    "linkTypes": {
      "enum": [ "Mention", "Link" ]
    },
    "actorTypes": {
      "enum": ["Application", "Group", "Organization", "Person", "Service", "Actor"]
    },
    "activityTypes": {
      "enum": [
        "Accept", "Add", "Announce", "Arrive", "Block", "Create", "Delete",
        "Dislike", "Flag", "Follow", "Ignore", "Invite", "Join", "Leave", "Like",
        "Listen", "Move", "Offer", "Question", "Reject", "Read", "Remove",
        "TentativeReject", "TentativeAccept", "Travel", "Undo", "Update", "View",
        "Activity"
      ]
    }
  }
}

View source