Summary
Add curated support for VRChat photo invites.
The current unified/bulk invite work intentionally keeps photo invites out of scope because VRChat's photo invite endpoint uses multipart/form-data, while the generic generated write client JSON-serializes request bodies.
Context
VRChat exposes:
POST /invite/{userId}/photo (inviteUserWithPhoto)
POST /requestInvite/{userId}/photo (requestInviteWithPhoto)
The OpenAPI body shape is multipart:
data: normal invite/request-invite payload
image: PNG binary
Our generated write tooling is not enough for this because it sends JSON and sets content-type: application/json.
Proposed Scope
Add a curated photo invite implementation that:
- Accepts one target user initially; consider bulk using the same image after the single-target path is stable.
- Accepts users as either
usr_... IDs or exact display names, matching the new curated invite behavior.
- Accepts destination using the same shape as
vrchat_invite: here, full location, worldId + instanceId, or bare instanceId where valid.
- Accepts
imagePath for a local PNG file.
- Reuses the invite
message / overwriteMessageSlot flow where possible.
- Builds multipart/form-data directly instead of using the generic JSON write client.
- Returns structured per-target results if/when bulk support is added.
Acceptance Criteria
- Photo invite sends use multipart/form-data with
data and image parts.
- Validation rejects missing/non-PNG/non-readable image paths with friendly guidance.
- Generated raw photo invite tools are either documented as not preferred or skipped in favor of curated tools.
- Tests cover multipart request construction without requiring a live VRChat call.
- Docs/tool catalog describe photo invite behavior and limitations.
Notes
Keep this separate from the first unified invite rollout so the core bulk/text invite path can stay mergeable without adding file upload complexity.
Summary
Add curated support for VRChat photo invites.
The current unified/bulk invite work intentionally keeps photo invites out of scope because VRChat's photo invite endpoint uses multipart/form-data, while the generic generated write client JSON-serializes request bodies.
Context
VRChat exposes:
POST /invite/{userId}/photo(inviteUserWithPhoto)POST /requestInvite/{userId}/photo(requestInviteWithPhoto)The OpenAPI body shape is multipart:
data: normal invite/request-invite payloadimage: PNG binaryOur generated write tooling is not enough for this because it sends JSON and sets
content-type: application/json.Proposed Scope
Add a curated photo invite implementation that:
usr_...IDs or exact display names, matching the new curated invite behavior.vrchat_invite:here, fulllocation,worldId + instanceId, or bareinstanceIdwhere valid.imagePathfor a local PNG file.message/overwriteMessageSlotflow where possible.Acceptance Criteria
dataandimageparts.Notes
Keep this separate from the first unified invite rollout so the core bulk/text invite path can stay mergeable without adding file upload complexity.