{
"id": "social.colibri.labeler.linkExternalAccount",
"defs": {
"main": {
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"platform"
],
"properties": {
"native": {
"type": "boolean",
"description": "True when the caller is a native app that expects the completed flow to hand back control over a custom URL scheme rather than a web redirect."
},
"platform": {
"type": "string",
"description": "The external platform to link.",
"knownValues": [
"opencollective"
]
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "AuthRequired",
"description": "Missing, malformed, or unverifiable service auth."
},
{
"name": "InvalidRequest",
"description": "A parameter was missing or malformed."
},
{
"name": "NotEnabled",
"description": "This labeler is not configured to link the requested platform."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"authorizeUrl"
],
"properties": {
"authorizeUrl": {
"type": "string",
"format": "uri",
"description": "Where to send the user to authorize the link. Single use and short lived."
}
}
},
"encoding": "application/json"
},
"description": "Starts linking the calling account to an account on an external funding platform, so the labeler can issue supporter badges automatically. Returns the platform's authorization URL, which the client opens in a browser. The caller's identity comes from service auth (aud = the labeler's did with the `#atproto_labeler` fragment, lxm = this method), and the returned URL carries a signed, short-lived state token binding the flow to that DID. On success the labeler publishes a `social.colibri.labeler.attestation` record and evaluates the subject's entitlements immediately. This grants no privileged access: any authenticated account may link itself, and only itself."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"revision": 1
}