{
"id": "social.colibri.community.migrate",
"defs": {
"main": {
"type": "procedure",
"input": {
"encoding": "multipart/form-data",
"description": "Optional replacement community picture blob, as a `picture` part. Migrated communities have no banner."
},
"errors": [
{
"name": "AuthRequired",
"description": "Missing, malformed, or unverifiable service auth."
},
{
"name": "Forbidden",
"description": "The caller lacks the permission this method requires."
},
{
"name": "InvalidRequest",
"description": "A parameter or body field was missing or malformed."
},
{
"name": "NotFound",
"description": "The referenced record does not exist."
},
{
"name": "UpstreamFailure",
"description": "A service outside this AppView failed."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"did",
"community",
"channelMap"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"community": {
"type": "string",
"format": "at-uri"
},
"channelMap": {
"type": "array",
"items": {
"ref": "lex:social.colibri.community.migrate#channelMapping",
"type": "ref"
},
"description": "Maps each cloned channel from its old AT-URI to its new AT-URI."
}
}
},
"encoding": "application/json"
},
"parameters": {
"type": "params",
"required": [
"kind",
"source"
],
"properties": {
"pds": {
"type": "string",
"description": "Bring-your-own PDS endpoint."
},
"kind": {
"type": "string",
"description": "The migration to run. 'legacy-community' migrates a pre-rework community record.",
"knownValues": [
"legacy-community"
]
},
"name": {
"type": "string"
},
"source": {
"type": "string",
"format": "at-uri",
"description": "The record being migrated (e.g. the legacy community)."
},
"password": {
"type": "string",
"description": "Bring-your-own account password."
},
"identifier": {
"type": "string",
"description": "Bring-your-own DID or handle."
},
"description": {
"type": "string"
},
"requiresApprovalToJoin": {
"type": "boolean"
}
}
},
"description": "Migrates a source record into a fresh community, cloning its structure and importing its members. The 'kind' discriminator selects the migration; today only legacy communities are supported, but the endpoint is designed to host future migrations. Provisioning mirrors community.create (managed when no PDS credentials are supplied, bring-your-own otherwise)."
},
"channelMapping": {
"type": "object",
"required": [
"old",
"new"
],
"properties": {
"new": {
"type": "string",
"format": "at-uri"
},
"old": {
"type": "string",
"format": "at-uri"
}
},
"description": "A single channel's old AT-URI mapped to its new AT-URI."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}