ActivityPub은 2개의 레이어를 제공한다:

이 작업은 엔드포인트를 통해 이루어지며, 이에 대한 예시는 다음과 같다:

{"@context": "<https://www.w3.org/ns/activitystreams>",
 "type": "Person",
 "id": "<https://social.example/alyssa/>",
 "name": "Alyssa P. Hacker",
 "preferredUsername": "alyssa",
 "summary": "Lisp enthusiast hailing from MIT",
 "inbox": "<https://social.example/alyssa/inbox/>",
 "outbox": "<https://social.example/alyssa/outbox/>",
 "followers": "<https://social.example/alyssa/followers/>",
 "following": "<https://social.example/alyssa/following/>",
 "liked": "<https://social.example/alyssa/liked/>"}

포스팅은 다음과 같이 이루어진다: (여기서의 포스트는 DM)

{"@context": "<https://www.w3.org/ns/activitystreams>",
 "type": "Note",
 "to": ["<https://chatty.example/ben/>"],
 "attributedTo": "<https://social.example/alyssa/>",
 "content": "Say, did you finish reading that book I lent you?"}

이는 Activity 오브젝트가 아니므로 서버는 이를 새 오브젝트가 생성되는 것으로 인지, Create 액티비티를 감싼다.

{"@context": "<https://www.w3.org/ns/activitystreams>",
 "type": "Create",
 "id": "<https://social.example/alyssa/posts/a29a6843-9feb-4c74-a7f7-081b9c9201d3>",
 "to": ["<https://chatty.example/ben/>"],
 "actor": "<https://social.example/alyssa/>",
 "object": {"type": "Note",
            "id": "<https://social.example/alyssa/posts/49e2d03d-b53a-4c4c-a95c-94a6abf45a19>",
            "attributedTo": "<https://social.example/alyssa/>",
            "to": ["<https://chatty.example/ben/>"],
            "content": "Say, did you finish reading that book I lent you?"}}

여기에 답장을 보내 보면…

{"@context": "<https://www.w3.org/ns/activitystreams>",
 "type": "Create",
 "id": "<https://chatty.example/ben/p/51086>",
 "to": ["<https://social.example/alyssa/>"],
 "actor": "<https://chatty.example/ben/>",
 "object": {"type": "Note",
            "id": "<https://chatty.example/ben/p/51085>",
            "attributedTo": "<https://chatty.example/ben/>",
            "to": ["<https://social.example/alyssa/>"],
            "inReplyTo": "<https://social.example/alyssa/posts/49e2d03d-b53a-4c4c-a95c-94a6abf45a19>",
            "content": "<p>Argh, yeah, sorry, I'll get it back to you tomorrow.</p>
                        <p>I was reviewing the section on register machines,
                           since it's been a while since I wrote one.</p>"}}

<aside> 💡

"type": "Note" 블록에서 content는 평문 텍스트 또는 유효한 HTML DOM을 지원한다. 이 HTML DOM은 Javascript나 인라인 CSS를 지원하지 않는다.

이 때문에 Misskey에서도 content에는 HTML DOM으로 넣고 (특수효과 부분은 <i>...</i>로 처리) 별도의 블록(”content-mfm: array<string>”이었나?)에 MFM을 담고 있다.

</aside>

그리고 좋아요를 표시하면 이렇다:

{"@context": "<https://www.w3.org/ns/activitystreams>",
 "type": "Like",
 "id": "<https://social.example/alyssa/posts/5312e10e-5110-42e5-a09b-934882b3ecec>",
 "to": ["<https://chatty.example/ben/>"],
 "actor": "<https://social.example/alyssa/>",
 "object": "<https://chatty.example/ben/p/51086>"}

<aside> 💡

여기서와 같이, 이모지로 반응하기의 경우는 표준이 아닙니다.

</aside>

"to": "array<string>" 블록에 "<https://www.w3.org/ns/activitystreams#Public>"을 포함하면 전체 공개(연합 타임라인 공개)로 포스팅한다. 이때 www.w3.org/ns/... 부분은 실제 AP 서버가 아니라 이를 통해 연합되지 않으므로, 팔로워를 태워 연합시키는 것이 일반적이다.