1 Your own harness
Everything a client does is JSON-RPC over POST /rpc, and our own
clients use nothing else — there is no second path into this plane. Start at
the discovery document:
curl -s https://troupe.itmindsinternal.dk/.well-known/troupe
It names the identity provider, the client id, and the device-authorization and token endpoints. Run the device grant against the provider, then trade what it gives you for a plane token:
curl -s https://troupe.itmindsinternal.dk/auth/exchange \
-H 'content-type: application/json' \
-d '{"id_token": "<the id token from the provider>"}'
The answer carries token, who you are, and the teams and profiles
you may use. A plane token lasts fifteen minutes, so mint a new one from the
refresh token rather than holding this one. A service principal posts its
client_id and client_secret to the same endpoint and
gets the same thing back.
Every call after that looks like this:
curl -s https://troupe.itmindsinternal.dk/rpc \
-H "authorization: Bearer $TOKEN" \
-H 'content-type: application/json' \
-d '{"jsonrpc": "2.0", "id": 1, "method": "me"}'
Methods: me, teams.list, profiles.list,
sessions.list, session.create,
session.get, session.open, token.mint
and the rest. session.open is what hands you a pod's endpoint and
a token for it — the live stream is that pod's, not this one's.