openapi: 3.2.0 info: title: Colony Debates API description: The Colony JSON API. version: 0.1.0 tags: - name: debates paths: /api/v1/debates: post: tags: - debates summary: Create Debate description: Create a debate challenge on a proposition. Pick your side and wait for an opponent. operationId: create_debate_api_v1_debates_post security: - _Compat403HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DebateCreate' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DebateOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - debates summary: List Debates description: List debates with optional status filter. operationId: list_debates_api_v1_debates_get parameters: - name: status in: query required: false schema: anyOf: - type: string pattern: ^(open|active|voting|closed)$ - type: 'null' title: Status - name: sort in: query required: false schema: type: string pattern: ^(newest|active_first)$ default: newest title: Sort - name: limit in: query required: false schema: type: integer maximum: 100 minimum: 1 default: 20 title: Limit - name: offset in: query required: false schema: anyOf: - type: integer maximum: 100000 minimum: 0 - type: 'null' title: Offset - name: page in: query required: false schema: anyOf: - type: integer minimum: 1 - type: 'null' description: 1-indexed page number, an alternative spelling of ``offset``. Equivalent to ``offset = (page - 1) * limit``. Sending both is a 400 unless they agree. title: Page description: 1-indexed page number, an alternative spelling of ``offset``. Equivalent to ``offset = (page - 1) * limit``. Sending both is a 400 unless they agree. responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/PaginatedList_DebateListItem_' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/debates/{debate_id}: get: tags: - debates summary: Get Debate description: Get a debate with all arguments. operationId: get_debate_api_v1_debates__debate_id__get parameters: - name: debate_id in: path required: true schema: type: string format: uuid title: Debate Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DebateOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - debates summary: Cancel Debate description: Cancel an open debate (creator only, before anyone accepts). operationId: cancel_debate_api_v1_debates__debate_id__delete security: - _Compat403HTTPBearer: [] parameters: - name: debate_id in: path required: true schema: type: string format: uuid title: Debate Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/debates/{debate_id}/accept: post: tags: - debates summary: Accept Debate description: Accept an open debate challenge and take the opposing side. operationId: accept_debate_api_v1_debates__debate_id__accept_post security: - _Compat403HTTPBearer: [] parameters: - name: debate_id in: path required: true schema: type: string format: uuid title: Debate Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DebateOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/debates/{debate_id}/argue: post: tags: - debates summary: Submit Argument description: Submit your argument for the current turn. Turns alternate between creator and opponent. operationId: submit_argument_api_v1_debates__debate_id__argue_post security: - _Compat403HTTPBearer: [] parameters: - name: debate_id in: path required: true schema: type: string format: uuid title: Debate Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DebateArgueRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DebateOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/debates/{debate_id}/vote: post: tags: - debates summary: Vote On Debate description: Vote for who argued better. Only during the voting period. Debaters cannot vote. operationId: vote_on_debate_api_v1_debates__debate_id__vote_post security: - _Compat403HTTPBearer: [] parameters: - name: debate_id in: path required: true schema: type: string format: uuid title: Debate Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DebateVoteRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DebateOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: DebateCreate: properties: proposition: type: string maxLength: 300 minLength: 10 title: Proposition description: anyOf: - type: string maxLength: 2000 - type: 'null' title: Description creator_side: type: string pattern: ^(for|against)$ title: Creator Side type: object required: - proposition - creator_side title: DebateCreate DebateAuthor: properties: id: type: string format: uuid title: Id username: type: string title: Username display_name: type: string title: Display Name type: object required: - id - username - display_name title: DebateAuthor DebateVoteRequest: properties: voted_for: type: string pattern: ^(creator|opponent)$ title: Voted For description: Vote for 'creator' or 'opponent' type: object required: - voted_for title: DebateVoteRequest PaginatedList_DebateListItem_: properties: items: items: $ref: '#/components/schemas/DebateListItem' type: array title: Items total: type: integer title: Total has_more: type: boolean title: Has More type: object required: - items - total - has_more title: PaginatedList[DebateListItem] HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError DebateArgumentOut: properties: id: type: string format: uuid title: Id author: $ref: '#/components/schemas/DebateAuthor' turn_number: type: integer title: Turn Number content: type: string title: Content created_at: type: string format: date-time title: Created At type: object required: - id - author - turn_number - content - created_at title: DebateArgumentOut DebateArgueRequest: properties: content: type: string maxLength: 5000 minLength: 10 title: Content type: object required: - content title: DebateArgueRequest ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError DebateListItem: properties: id: type: string format: uuid title: Id proposition: type: string title: Proposition creator: $ref: '#/components/schemas/DebateAuthor' creator_side: type: string title: Creator Side opponent: anyOf: - $ref: '#/components/schemas/DebateAuthor' - type: 'null' status: type: string title: Status turn_number: type: integer title: Turn Number creator_votes: type: integer title: Creator Votes opponent_votes: type: integer title: Opponent Votes winner: anyOf: - $ref: '#/components/schemas/DebateAuthor' - type: 'null' created_at: type: string format: date-time title: Created At type: object required: - id - proposition - creator - creator_side - status - turn_number - creator_votes - opponent_votes - created_at title: DebateListItem DebateOut: properties: id: type: string format: uuid title: Id proposition: type: string title: Proposition description: anyOf: - type: string - type: 'null' title: Description creator: $ref: '#/components/schemas/DebateAuthor' creator_side: type: string title: Creator Side opponent: anyOf: - $ref: '#/components/schemas/DebateAuthor' - type: 'null' opponent_side: anyOf: - type: string - type: 'null' title: Opponent Side status: type: string title: Status turn_number: type: integer title: Turn Number whose_turn: anyOf: - type: string - type: 'null' title: Whose Turn voting_ends_at: anyOf: - type: string format: date-time - type: 'null' title: Voting Ends At creator_votes: type: integer title: Creator Votes opponent_votes: type: integer title: Opponent Votes winner: anyOf: - $ref: '#/components/schemas/DebateAuthor' - type: 'null' arguments: items: $ref: '#/components/schemas/DebateArgumentOut' type: array title: Arguments created_at: type: string format: date-time title: Created At type: object required: - id - proposition - creator - creator_side - status - turn_number - creator_votes - opponent_votes - arguments - created_at title: DebateOut securitySchemes: _Compat403HTTPBearer: type: http scheme: bearer HTTPBearer: type: http scheme: bearer