⚡ Firefly Detailed API

Structure Overview

Firefly uses Hyper in Rust to deliver endpoints that almost exclusively return and accept Protocol Buffers (.proto). Below is the detailed structural format with exact query arguments and payload types for every encrypted messaging endpoint.


User Configuration & Auth

POST/sign

Arguments (Query)

?device_id=<u8>&address_id=<u64>

Request Body

Credential Blob (4096b max)

Returns

firefly.SignedToken
GET/jwks.json

Arguments (Query)

None

Request Body

None

Returns

JSON Web Key Set (JWKS)
POST/user/device

Arguments (Query)

None

Request Body

firefly.Address (Proto)

Returns

firefly.Address (with new ID)
GET/user/devices

Arguments (Query)

None

Request Body

None

Returns

firefly.UserDevices
DELETE/user/device

Arguments (Query)

?id=<u64>

Request Body

None

Returns

Empty (200 OK)

Key Management Foundation

POST/user/preKeyBundles

Arguments (Query)

None

Request Body

firefly.PreKeyBundleEntries

Returns

Empty (200 OK)
GET/user/preKeyBundles

Arguments (Query)

?ids=<i64...>&other=<string>

Request Body

None

Returns

firefly.PreKeyBundleEntries
GET/group/keyPackages

Arguments (Query)

?other=<uname>&address=<u64> | ?all=true

Request Body

None

Returns

firefly.GroupKeyPackage(s)
POST/group/keyPackages

Arguments (Query)

?address=<u64>

Request Body

firefly.GroupKeyPackages

Returns

Empty (200 OK)

Encrypted Group Actions

POST/group

Arguments (Query)

None

Request Body

firefly.Group (Name, Desc, State)

Returns

firefly.GroupId
GET/group

Arguments (Query)

?id=<u64>

Request Body

None

Returns

firefly.Group
GET/groups

Arguments (Query)

None

Request Body

None

Returns

firefly.Groups (List)
POST/group/commit

Arguments (Query)

None

Request Body

firefly.GroupMessage (Commit)

Returns

firefly.GroupMessage (Updated)
POST/group/commitAndWelcome

Arguments (Query)

None

Request Body

firefly.GroupCommitAndWelcome

Returns

firefly.GroupMessage
POST/group/sync

Arguments (Query)

?address=<u64>&limit=<u32>

Request Body

firefly.GroupSyncRequests

Returns

firefly.GroupMessages
GET/group/commits

Arguments (Query)

?startAfter=<u64>&limit=<u32>&groupId(s)=<u64 / i64...>

Request Body

None

Returns

firefly.GroupMessages

Direct Conversations

POST/user/conversation

Arguments (Query)

?other=<username>&settings=<u32>

Request Body

None

Returns

Empty (200 OK)
GET/user/conversations

Arguments (Query)

None

Request Body

None

Returns

firefly.Conversations
DELETE/user/conversations

Arguments (Query)

?ids=<i64...>

Request Body

None

Returns

Empty (200 OK)
DELETE/user/message

Arguments (Query)

?conversationId=<u64>&messageId=<u64>

Request Body

None

Returns

Empty (200 OK)

WebSocket & Integrations

GET (WS)/ (Upgrade)

Arguments (Query)

?device_id=<u8>&uid=<u64>&last_synced_upto=<u64>&token=<JWT>

Request Body

None

Returns

Live WebSocket Connection
POST/notifyFollower

Arguments (Query)

?from=<string>&to=<string>

Request Body

Headers: AUTHORIZE_ADMIN

Returns

Triggers Firebase FCM internally
GET/webrtcConfig

Arguments (Query)

None

Request Body

None

Returns

WebRTC Config JSON

Zero-Trust Note

Notice how the request and response bodies almost exclusively use `.proto` structures matching `firefly.GroupMessage` or bundles. The server operates as a completely blind relayer mathematical epochs padding to verify sequences natively!