We're integrating avails (ATProto-powered group scheduling) with OpenMeet's calendar availability API. The ATProto service auth token exchange returns 500.
What we're doing:
- User signs into avails via ATProto OAuth (Bluesky)
- Our server calls
com.atproto.server.getServiceAuth on the user's PDS with:
aud: did:web:api.openmeet.net
lxm: net.openmeet.auth
- PDS returns a signed JWT (this step succeeds)
- We POST the JWT to
https://api.openmeet.net/api/v1/auth/atproto/service-auth with:
Content-Type: application/json
x-tenant-id: 1
- Body:
{ "token": "<pds-signed-jwt>" }
- Response: 500 Internal Server Error
{"statusCode":500,"message":"Internal server error","path":"/api/v1/auth/atproto/service-auth","timestamp":"2026-04-03T12:44:19.676Z"}
Previous error (before adding lxm):
{"statusCode":401,"message":"Invalid lexicon method"}
Adding lxm: net.openmeet.auth resolved that, but now we get 500.
User DID: did:plc:7t3rryg4ck5ifux2jokclglk (has an OpenMeet account, signed up via Bluesky)
Our goal: Exchange the service auth JWT for OpenMeet tokens, then use the bearer token to call POST /api/external-calendar/events to fetch the user's calendar availability and show it in our scheduling grid.
Context: avails is an open-source LettuceMeet alternative on ATProto. We want to use OpenMeet as the calendar availability layer so users connect their calendar once on OpenMeet and every ATProto app benefits. Integration issue.
We're integrating avails (ATProto-powered group scheduling) with OpenMeet's calendar availability API. The ATProto service auth token exchange returns 500.
What we're doing:
com.atproto.server.getServiceAuthon the user's PDS with:aud: did:web:api.openmeet.netlxm: net.openmeet.authhttps://api.openmeet.net/api/v1/auth/atproto/service-authwith:Content-Type: application/jsonx-tenant-id: 1{ "token": "<pds-signed-jwt>" }{"statusCode":500,"message":"Internal server error","path":"/api/v1/auth/atproto/service-auth","timestamp":"2026-04-03T12:44:19.676Z"}Previous error (before adding lxm):
{"statusCode":401,"message":"Invalid lexicon method"}Adding
lxm: net.openmeet.authresolved that, but now we get 500.User DID:
did:plc:7t3rryg4ck5ifux2jokclglk(has an OpenMeet account, signed up via Bluesky)Our goal: Exchange the service auth JWT for OpenMeet tokens, then use the bearer token to call
POST /api/external-calendar/eventsto fetch the user's calendar availability and show it in our scheduling grid.Context: avails is an open-source LettuceMeet alternative on ATProto. We want to use OpenMeet as the calendar availability layer so users connect their calendar once on OpenMeet and every ATProto app benefits. Integration issue.