{
	"lexicon": 1,
	"id": "com.atproto.server.createSession",
	"defs": {
		"main": {
			"type": "procedure",
			"description": "Create an authentication session.",
			"input": {
				"encoding": "application/json",
				"schema": {
					"type": "object",
					"required": ["identifier", "password"],
					"properties": {
						"identifier": {
							"type": "string",
							"description": "Handle or other identifier supported by the server for the authenticating user."
						},
						"password": { "type": "string" },
						"authFactorToken": { "type": "string" },
						"allowTakendown": {
							"type": "boolean",
							"description": "When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned"
						}
					}
				}
			},
			"output": {
				"encoding": "application/json",
				"schema": {
					"type": "object",
					"required": ["accessJwt", "refreshJwt", "handle", "did"],
					"properties": {
						"accessJwt": { "type": "string" },
						"refreshJwt": { "type": "string" },
						"handle": { "type": "string", "format": "handle" },
						"did": { "type": "string", "format": "did" },
						"didDoc": { "type": "unknown" },
						"email": { "type": "string" },
						"emailConfirmed": { "type": "boolean" },
						"emailAuthFactor": { "type": "boolean" },
						"active": { "type": "boolean" },
						"status": {
							"type": "string",
							"description": "If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted.",
							"knownValues": ["takendown", "suspended", "deactivated"]
						}
					}
				}
			},
			"errors": [{ "name": "AccountTakedown" }, { "name": "AuthFactorTokenRequired" }]
		}
	}
}
