openapi: 3.2.0
info:
  version: 3.0.0
  title: Pronouns.Page API
  description: |
    The Pronouns.Page API allows you to retrieve and manage pronoun data for users.
    
    Most of the routes listed here are considered to be public as they do not require authentication.
    However, some routes may require an API key for access to private or user-specific data.
    
    In addition, routes may take an optional `locale` query parameter.
    This parameter allows you to specify the locale of the data you would like to access. By default,
    it would be the locale for the subdomain the API is being ran from (e.g., `en` for `en.pronouns.page`).
  termsOfService: https://en.pronouns.page/terms
  contact:
    name: Support
    url: https://en.pronouns.page/contact
    email: contact@pronouns.page
  license:
    name: Opinionated Queer License (OQL) v1.4
    url: https://oql.avris.it/license/v1.4
servers:
  - url: https://{region}.pronouns.page/api/public/v3
    description: Generic Language-specific server
    variables:
      region:
        default: en
        enum:
          - en
          - et
          - lad
          - nl
          - nb
          - nn
          - pt
          - ro
          - sv
          - tr
          - vi
          - ar
          - ru
          - ua
          - ja
          - zh
          - hu
        description: The language/region of the server to use.
  - url: https://pronomen.net/api/public/v3
    description: Deutsch (German) server
  - url: https://pronombr.es/api/public/v3
    description: Español (Spanish) server
  - url: https://pronomejo.net/api/public/v3
    description: Esperanto server
  - url: https://pronom.it/api/public/v3
    description: Italiano (Italian) server
  - url: https://fornovn.fo/api/public/v3
    description: Føroyskt (Faroese) server
  - url: https://pronoms.fr/api/public/v3
    description: Français (French) server
  - url: https://zaimki.pl/api/public/v3
    description: Polski (Polish) server
  - url: https://pronouns.page/api/public/v3
    description: Base server (English)
x-topics:
  - title: API versions
    content: |
      The Pronouns.Page API is versioned.
      Version 3 is the latest and most stable version, and it is recommended for use.
      Version 2 is still available but may have some undocumented features.
      Version 1 has been completely removed and should not be used.
  - title: Error responses
    content: |
      When running API routes, the server by default will respond with an HTML website.
      To get the errors in JSON output, you will need to set the `Accept` header to `application/json`.
    example: |
      ```bash
      curl -H Accept=application/json ...
      ```
tags:
  - name: Metadata
    description: Operations related to API metadata
  - name: Calendar
    description: Operations related to the Queer Calendar
  - name: Dictionary
    description: Operations related to the dictionary of nouns
  - name: Inclusive
    description: Operations related to the Inclusive Language dictionary
  - name: Pronouns
    description: Operations related to pronoun sets
  - name: Sources
    description: Operations related to pronoun usages in texts of culture
  - name: Terminology
    description: Operations related to Queer Terminology Dictionary
  - name: Users
    description: Operations related to user data
paths:
  /:
    get:
      tags:
        - Metadata
      summary: Retrieve API metadata
      description: Get general information about the Pronouns.Page API on the specific version.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON object containing API metadata
          content:
            application/json:
              example:
                v: "v3"
                support: "Primary"
              schema:
                $ref: '#/components/schemas/APIVersion'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /pronouns:
    get:
      tags:
        - Pronouns
      summary: Retrieve a list of pronoun sets
      description: Get a list of all available pronouns.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of pronouns
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  $ref: '#/components/schemas/Pronoun'
              example:
                - canonicalName: he
                  description: Normative “he/him”
                  normative: true
                  morphemes:
                    pronoun_subject: he
                    pronoun_object: him
                    possessive_determiner: his
                    possessive_pronoun: his
                    reflexive: himself
                  pronunciations: { }
                  plural: false
                  pluralHonorific: false
                  aliases:
                    - he/him
                  history: ""
                  pronounceable: true
                  thirdForm: null
                  smallForm: null
                  sourcesInfo: null
                  nullPronoun: false
                  examples:
                    - I think he is very nice.
                    - I met him recently.
                    - Is this his dog?
                    - He told me that the house is his.
                    - He said he would rather do it himself.
                    - He is really beautiful.
                    - He answered the phone.
                    - He takes good care of his cat.
                    - He did it all by himself.
                    - He talks in his sleep.
                    - He landed the plane safely.
                    - He argues that…
                    - Did you buy him his gift?
                    - I asked him if I can borrow his pencil.
                    - I talked to him yesterday.
                    - Would you like to go to the movies with him?
                    - Can you call him when his cat awakes?
                    - His graduation starts soon.
                    - My favorite color is purple, his is yellow.
                  name: he/him
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /pronouns/{pronoun}:
    get:
      tags:
        - Pronouns
      summary: Retrieve a specific pronoun set
      description: Get details of a specific pronoun set by its canonical name.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: pronoun
          in: path
          required: true
          description: The canonical name of the pronoun set (e.g. "they/them").
          schema:
            type: string
      responses:
        '200':
          description: A JSON object representing the pronoun set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pronoun'
              example:
                canonicalName: they/them
                description: Normative “they/them”
                normative: true
                morphemes:
                  pronoun_subject: they
                  pronoun_object: them
                  possessive_determiner: their
                  possessive_pronoun: theirs
                  reflexive: themself
                pronunciations: { }
                plural: true
                pluralHonorific: false
                aliases:
                  - they/them
                history: ""
                pronounceable: true
                thirdForm: null
                smallForm: null
                sourcesInfo: null
                nullPronoun: false
                examples:
                  - I think they are very nice.
                  - I met them recently.
                  - Is this their dog?
                  - They told me that the house is theirs.
                  - They said they would rather do it themself.
                  - They are really beautiful.
                  - They answered the phone.
                  - They take good care of their cat.
                  - They did it all by themself.
                  - They talk in their sleep.
                  - They landed the plane safely.
                  - They argue that…
                  - Did you buy them their gift?
                  - I asked them if I can borrow their pencil.
                  - I talked to them yesterday.
                  - Would you like to go to the movies with them?
                  - Can you call them when their cat awakes?
                  - Their graduation starts soon.
                  - My favorite color is purple, theirs is yellow.
                name: they/them
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /banner/{pronoun}.png:
    get:
      tags:
        - Pronouns
      summary: Retrieve a pronoun badge image
      description: Get a PNG image badge for a specific pronoun set by its canonical name.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: pronoun
          in: path
          required: true
          description: The canonical name of the pronoun set (e.g., "they/them").
          schema:
            type: string
      responses:
        '200':
          description: A PNG image badge representing the pronoun set
          content:
            image/png:
              schema:
                contentMediaType: image/png
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /sources:
    get:
      tags:
        - Sources
      summary: Retrieve a list of usages of gender-inclusive language in cultural texts
      description: Get a list of all sources.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of sources
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  $ref: '#/components/schemas/Source'
              example:
                - id: 01ERQRCV0TW0E5SEGTKJ7KKE18
                  locale: en
                  pronouns: ze
                  type: Book
                  author: K. A. ^Cook
                  title: The Differently Animated and Queer Society
                  extra: A short story from a collection called “Crooked Words” by K. A. Cook
                  year: 2013
                  fragments: >-
                    Pat couldn’t help a slight frown as ze got out of hir car. It wasn’t likely
                    that someone was going to try and mug a zombie, but even so, the neighbourhood didn’t
                    seem all that prosperous. There weren’t even too many cars around, just one down
                    the other end of the street and a rusty bike chained to a light post.|Maybe ze shouldn’t
                    have waited until ze’d be the last to arrive. What if everyone had come, decided
                    that nobody was coming, and gone home already? What if ze was the only one to come
                    at all?@This will be fine, Pat told hirself, in what felt like a ridiculous attempt
                    to bolster hir courage. If ze had summoned up the courage for hir last job interview—and
                    Pat thought ze would have gotten it despite being undead if ze felt remotely inclined
                    to try and pass, something that annoyed hir job seeker support officer no end—then
                    ze could summon up the courage to do this. This should be easier than a job interview!
                  comment:
                  link:
                  submitter_id: 01EP5KZNBCCAD2024012HFMCR3
                  approved: 1
                  deleted: 0
                  base_id:
                  key:
                  images:
                  spoiler: 0
                  submitter: szymon
                  versions:
                    -
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /sources/{id}:
    get:
      tags:
        - Sources
      summary: Retrieve a specific source
      description: Get details of a specific source by its ID.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: id
          in: path
          required: true
          description: The ID of the pronoun data source.
          schema:
            type: integer
      responses:
        '200':
          description: A JSON object representing the pronoun data source
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Source'
              example:
                id: 01ERQRCV0TW0E5SEGTKJ7KKE18
                locale: en
                pronouns: ze
                type: Book
                author: K. A. ^Cook
                title: The Differently Animated and Queer Society
                extra: A short story from a collection called “Crooked Words” by K. A. Cook
                year: 2013
                fragments: >
                  Pat couldn’t help a slight frown as ze got out of hir car. It wasn’t likely
                  that someone was going to try and mug a zombie, but even so, the neighbourhood didn’t
                  seem all that prosperous. There weren’t even too many cars around, just one down
                  the other end of the street and a rusty bike chained to a light post.|Maybe ze shouldn’t
                  have waited until ze’d be the last to arrive. What if everyone had come, decided
                  that nobody was coming, and gone home already? What if ze was the only one to come
                  at all? This will be fine, Pat told hirself, in what felt like a ridiculous attempt
                  to bolster hir courage. If ze had summoned up the courage for hir last job interview—and
                  Pat thought ze would have gotten it despite being undead if ze felt remotely inclined
                  to try and pass, something that annoyed hir job seeker support officer no end—then
                  ze could summon up the courage to do this. This should be easier than a job interview!
                comment:
                link:
                submitter_id: 01EP5KZNBCCAD2024012HFMCR3
                approved: 1
                deleted: 0
                base_id:
                key:
                images:
                spoiler: 0
                submitter: szymon
                versions:
                  -
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /nouns:
    get:
      tags:
        - Dictionary
      summary: Retrieve a list of nouns with gender-neutral options
      description: Get a list of all available gendered nouns in the dictionary.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of gendered nouns
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  $ref: '#/components/schemas/Noun'
              example:
                - id: 01JBXS13H8311MFPJYEXCPFZZJ
                  key: "(un)manned"
                  words:
                    masc:
                      singular:
                        - "(un)manned"
                    fem:
                      singular:
                        - "(un)womanned"
                    neutr:
                      singular:
                        - "(un)attended"
                        - "(un)crewed"
                        - "(un)piloted"
                        - "(un)armed"
                        - "(un)staffed"
                        - "(un)occupied"
                  classInstance:
                  categories:
                    - adjective
                  sources:
                    -
                  sourcesData:
                    -
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /nouns/search/{id}:
    get:
      tags:
        - Dictionary
      summary: Retrieve a specific gendered noun
      description: Get details of a specific gendered noun by its ID.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: id
          in: path
          required: true
          description: The ID of the gendered noun.
          schema:
            type: integer
      responses:
        '200':
          description: A JSON object representing the gendered noun
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Noun'
              example:
                id: 01JBXS13H8311MFPJYEXCPFZZJ
                key: "(un)manned"
                words:
                  masc:
                    singular:
                      - "(un)manned"
                  fem:
                    singular:
                      - "(un)womanned"
                  neutr:
                    singular:
                      - "(un)attended"
                      - "(un)crewed"
                      - "(un)piloted"
                      - "(un)armed"
                      - "(un)staffed"
                      - "(un)occupied"
                classInstance:
                categories:
                  - adjective
                sources:
                  -
                approved: true
                base:
                author: tymk
                sourcesData:
                  -
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /inclusive:
    get:
      tags:
        - Inclusive
      summary: Retrieve entries from the Inclusive Dictionary
      description: Get a list of all entries in the Inclusive Language Dictionary.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of Inclusive features
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  $ref: '#/components/schemas/Inclusive'
              example:
                - id: "01GYEG2T9H00PSTX8B0N7EWG6Z"
                  insteadOf: '"he/she"|"he or she"'
                  say: "he/she/they (formal)|he, she, or they (formal)|they (formal)"
                  because: >
                    Putting “he/she” or “him/her” in a sentence where the person is hypothetical
                    or the gender of the person is unknown assumes that the person it's referring to
                    uses either he/him or she/her pronouns, which some people do not.
                  locale: en
                  approved: 1
                  base_id:
                  author_id:
                  categories: transgender,intersex
                  links:
                    -
                  deleted: 0
                  clarification:
                  author:
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /inclusive/search/{id}:
    get:
      tags:
        - Inclusive
      summary: Retrieve a specific entry from the Inclusive Dictionary
      description: Get details of a specific entry from the Inclusive Dictionary by its ID.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: id
          in: path
          required: true
          description: The ID of the Inclusive feature.
          schema:
            type: integer
      responses:
        '200':
          description: A JSON object representing the Inclusive feature
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Inclusive'
              example:
                id: "01GYEG2T9H00PSTX8B0N7EWG6Z"
                insteadOf: '"he/she"|"he or she"'
                say: "he/she/they (formal)|he, she, or they (formal)|they (formal)"
                because: >
                  Putting “he/she” or “him/her” in a sentence where the person is hypothetical
                  or the gender of the person is unknown assumes that the person it's referring to
                  uses either he/him or she/her pronouns, which some people do not.
                locale: en
                approved: 1
                base_id:
                author_id:
                categories: transgender,intersex
                links:
                  -
                deleted: 0
                clarification:
                author:
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /terms:
    get:
      tags:
        - Terminology
      summary: Retrieve a list of Queer Terminology definitions
      description: Get a list of all Queer Terminology definitions.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of terminology definitions
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  $ref: '#/components/schemas/Term'
              example:
                - id: 01K2FVW0TRKB02HB3JQJZTG5G4
                  term: A-spectrum|aspec
                  original: "{Asexual}|{Aromantic}"
                  definition: an umbrella term referring to the {aromantic spectrum} and the {asexual
                    spectrum} as well as other types of anattractional identities such as aplatonic
                    or nonaesthetic. It may also sometimes be used to refer to other spectrums that
                    begin with A such as agender. Using it only with reference to asexuality is mistaken
                    and leads to {aromantic erasure}.
                  locale: en
                  approved: 1
                  base_id:
                  author_id: 01GFNSEW85S3M7YBQGZ4CGF8YF
                  deleted: 0
                  flags:
                    -
                  category: sexual orientation,romantic orientation,tertiary orientation
                  images: 01HKEAQJME4R6S7KBSRYJ00ASC,01F8JVNH9FH9DKCJDW1R5J7B0E,01K2FVVR8BQF6S2A2TV4GG68B6,01K2FVVSBGTBNZH85FR7TPDB2S,01K2FVVSWJ2A96WHHSBKSBECXB,01K2FVVWNT1W830F172W996RCG,01K2FVVWV6H91ZDDJ2C9S1J8V6,01K2FVVX0AJ1XERT6F4032P23S,01K2FVVX3K6EMW5C5D6Q06BATP,01K2FVVX6VDEV7PPSQMB8K0G3Z
                  key: aspec
                  author: Annastarlight
                  versions:
                    - id: 01FCTYYEYASZ6WJHXQ25S4Q5J5
                      term: A-spektrum, aspek
                      original: ang. a-spectrum, aspec
                      definition: |-
                        termin zbiorczy obejmujący {#Spektrum aromantyczności=spektrum aromantyczności} i {#Spektrum aseksualności=spektrum aseksualności}.
                        Używanie go do opisywania wyłącznie spektrum aseksualności jest błędne i prowadzi do {#Wymazywanie aromantyczności=wymazywania aromantyczności}.
                        Na {https://sapphic-squirrel.tumblr.com/post/189130109062/hello-everyone-i-want-to-present-a-community-flag=alternatywnej wersji flagi} znajduje się aloes.
                      locale: pl
                      approved: 1
                      base_id:
                      author_id: 01EP5KZNBCCAD2024012HFMCR3
                      deleted: 0
                      flags:
                        -
                      category: orientacja seksualna,orientacja romantyczna
                      images: 01EX5FA37QHQCEEBBC0W889ZEH,01F8JVNH9FH9DKCJDW1R5J7B0E
                      key: aspec
                      author: szymon
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /terms/terms.md:
    get:
      tags:
        - Terminology
      summary: Retrieve Queer Terminology definitions as Markdown
      description: >
        Queer Terminology dictionary formatted as a Markdown document.
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A Markdown document containing all approved terminology definitions.
          content:
            text/markdown; charset=utf-8:
              schema:
                type: string
              example: |
                ## A-spectrum, aspec (Asexual, Aromantic)

                an umbrella term referring to the aromantic spectrum and the asexual spectrum...
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /terms/search/{id}:
    get:
      tags:
        - Terminology
      summary: Retrieve a specific Queer Terminology definition
      description: Get details of a specific Queer Terminology definition by its ID.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: id
          in: path
          required: true
          description: The ID of the terminology definition.
          schema:
            type: integer
      responses:
        '200':
          description: A JSON object representing the terminology definition
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Term'
              example:
                id: 01K2FVW0TRKB02HB3JQJZTG5G4
                term: A-spectrum|aspec
                original: "{Asexual}|{Aromantic}"
                definition: an umbrella term referring to the {aromantic spectrum} and the {asexual
                  spectrum} as well as other types of anattractional identities such as aplatonic
                  or nonaesthetic. It may also sometimes be used to refer to other spectrums that
                  begin with A such as agender. Using it only with reference to asexuality is mistaken
                  and leads to {aromantic erasure}.
                locale: en
                approved: 1
                base_id:
                author_id: 01GFNSEW85S3M7YBQGZ4CGF8YF
                deleted: 0
                flags:
                  -
                category: sexual orientation,romantic orientation,tertiary orientation
                images: 01HKEAQJME4R6S7KBSRYJ00ASC,01F8JVNH9FH9DKCJDW1R5J7B0E,01K2FVVR8BQF6S2A2TV4GG68B6,01K2FVVSBGTBNZH85FR7TPDB2S,01K2FVVSWJ2A96WHHSBKSBECXB,01K2FVVWNT1W830F172W996RCG,01K2FVVWV6H91ZDDJ2C9S1J8V6,01K2FVVX0AJ1XERT6F4032P23S,01K2FVVX3K6EMW5C5D6Q06BATP,01K2FVVX6VDEV7PPSQMB8K0G3Z
                key: aspec
                author: Annastarlight
                versions:
                  - id: 01FCTYYEYASZ6WJHXQ25S4Q5J5
                    term: A-spektrum, aspek
                    original: ang. a-spectrum, aspec
                    definition: |-
                      termin zbiorczy obejmujący {#Spektrum aromantyczności=spektrum aromantyczności} i {#Spektrum aseksualności=spektrum aseksualności}.
                      Używanie go do opisywania wyłącznie spektrum aseksualności jest błędne i prowadzi do {#Wymazywanie aromantyczności=wymazywania aromantyczności}.
                      Na {https://sapphic-squirrel.tumblr.com/post/189130109062/hello-everyone-i-want-to-present-a-community-flag=alternatywnej wersji flagi} znajduje się aloes.
                    locale: pl
                    approved: 1
                    base_id:
                    author_id: 01EP5KZNBCCAD2024012HFMCR3
                    deleted: 0
                    flags:
                      -
                    category: orientacja seksualna,orientacja romantyczna
                    images: 01EX5FA37QHQCEEBBC0W889ZEH,01F8JVNH9FH9DKCJDW1R5J7B0E
                    key: aspec
                    author: szymon
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /profile/get/{username}:
    get:
      tags:
        - Users
      summary: Retrieve card of a specific user by username
      description: Get the card/profile by username.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: username
          in: path
          required: true
          description: The username of the user whose pronouns are to be retrieved.
          schema:
            type: string
      responses:
        '200':
          description: A JSON object representing the user's pronouns
          $ref: '#/components/responses/User'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /profile/get-id/{id}:
    get:
      tags:
        - Users
      summary: Retrieve card of a specific user by ID
      description: Get the card/profile by user ID.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: id
          in: path
          required: true
          description: The ID of the user whose pronouns are to be retrieved.
          schema:
            type: integer
      responses:
        '200':
          description: A JSON object representing the user's pronouns
          $ref: '#/components/responses/User'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /user/social-lookup/{provider}/{identifier}:
    get:
      tags:
        - Users
      summary: Find a Pronouns.page username by associated social media username
      description: Get a PP username by social media provider and username
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: provider
          in: path
          required: true
          description: The social media provider (e.g., "twitter", "github").
          schema:
            type: string
        - name: identifier
          in: path
          required: true
          description: The unique identifier for the user on the specified social media platform.
          schema:
            type: string
      responses:
        '200':
          description: The external identifier of the user
          content:
            text/plain:
              schema:
                type: string
              example: 'therealbenpai'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /calendar/today:
    get:
      tags:
        - Calendar
      summary: Retrieve today's events in the Queer Calendar
      description: Get a list of today's events in the Queer Calendar
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: A JSON array of today's events in the Queer Calendar
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Calendar'
              example:
                day: '2025-09-18'
                link: https://en.pronouns.page/calendar/2025-09-18
                image: https://en.pronouns.page/calendar/en/2025-09-18.png
                message: |-
                  [English] 2025-09-18

                  We're celebrating/commemorating:
                   - HIV/AIDS and Aging Awareness Day
                   - Bisexual Awareness Week
                   - Suicide Prevention Month
                   - Diversity Month (Uruguay)

                  https://en.pronouns.page/calendar/2025-09-18
                events:
                  - HIV/AIDS and Aging Awareness Day
                  - Bisexual Awareness Week
                  - Suicide Prevention Month
                  - Diversity Month (Uruguay)
                eventsRaw:
                  - name: hiv_aging_awareness_day
                    display:
                      type: flag
                      name: _red-ribbon
                    month: 9
                    level: 3
                    terms:
                      - aids
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: bisexual_week
                    display:
                      type: flag
                      name: Bisexual
                    month: 9
                    level: 1
                    terms:
                      - bisexual
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: suicide_prevention_month
                    display:
                      type: flag
                      name: _yellow-ribbon
                    month: 9
                    level: 0
                    terms: [ ]
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: Diversity Month (Uruguay)
                    display:
                      type: flag
                      name: LGBTQ
                    month: 9
                    level: 0
                    terms: [ ]
                    localCalendar:
                    yearCondition:
                    comment:
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /calendar/{date}:
    get:
      tags:
        - Calendar
      summary: Retrieve events from the Queer Calendar for a specific date.
      description: Get a list of events from the Queer Calendar happening on a specific date.
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: date
          in: path
          required: true
          description: "The date for which to retrieve pronoun-related events (format: YYYY-MM-DD)."
          schema:
            type: string
            format: date
            example: 2024-06-01
      responses:
        '200':
          description: A JSON array of pronoun-related events for the specified date
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Calendar'
              example:
                day: '2025-09-18'
                link: https://en.pronouns.page/calendar/2025-09-18
                image: https://en.pronouns.page/calendar/en/2025-09-18.png
                message: |-
                  [English] 2025-09-18

                  We're celebrating/commemorating:
                   - HIV/AIDS and Aging Awareness Day
                   - Bisexual Awareness Week
                   - Suicide Prevention Month
                   - Diversity Month (Uruguay)

                  https://en.pronouns.page/calendar/2025-09-18
                events:
                  - HIV/AIDS and Aging Awareness Day
                  - Bisexual Awareness Week
                  - Suicide Prevention Month
                  - Diversity Month (Uruguay)
                eventsRaw:
                  - name: hiv_aging_awareness_day
                    display:
                      type: flag
                      name: _red-ribbon
                    month: 9
                    level: 3
                    terms:
                      - aids
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: bisexual_week
                    display:
                      type: flag
                      name: Bisexual
                    month: 9
                    level: 1
                    terms:
                      - bisexual
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: suicide_prevention_month
                    display:
                      type: flag
                      name: _yellow-ribbon
                    month: 9
                    level: 0
                    terms: [ ]
                    localCalendar:
                    yearCondition:
                    comment:
                  - name: Diversity Month (Uruguay)
                    display:
                      type: flag
                      name: LGBTQ
                    month: 9
                    level: 0
                    terms: [ ]
                    localCalendar:
                    yearCondition:
                    comment:
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /calendar/queer:
    get:
      tags:
        - Calendar
      summary: Retrieve Queer Calendar ICS
      description: Get a iCalendar-formatted file containing all of the Queer Calendar events specified for the locale
      parameters:
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: The iCalendar file
          $ref: '#/components/responses/ICalendar'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /calendar/queer/{year}:
    get:
      tags:
        - Calendar
      summary: Retrieve Queer Calendar for a specific year
      description: Get an iCalendar-formatted file containing Queer Calendar events for the specified year
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: year
          in: path
          required: true
          description: The year to retreve events for
          schema:
            type: string
            example: "2026"
      responses:
        '200':
          description: The iCalendar file
          $ref: '#/components/responses/ICalendar'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /calendar/queer/{year}/{uuid}:
    get:
      tags:
        - Calendar
      summary: Retrieve a specific Queer Calendar event
      description: Get an iCalendar-formatted file containing the specific event from the Queer Calendar
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: year
          in: path
          required: true
          description: The year to retreve events for
          schema:
            type: string
            example: "2026"
        - name: uuid
          in: path
          required: true
          description: The events unique identifier (UUID)
          schema:
            type: string
            format: uuid
            example: 1b0aac34-29b6-4c2f-a3b7-8de0d1cc28e82a123030-1fc9-44da-9b53-45e76f76e346
      responses:
        '200':
          description: The iCalendar file
          $ref: '#/components/responses/ICalendar'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
  /user/calendar/{user}:
    get:
      tags:
        - Calendar
        - User
      summary: Retrieve user's calendar entries by username
      description: Get an iCalendar-formatted file containing calendar entries of a specific user
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: user
          in: path
          required: true
          description: The user to retrieve the calendar of
          schema:
            type: string
            example: andrea
      responses:
        '200':
          description: The iCalendar file
          $ref: '#/components/responses/ICalendar'
        default:
          description: Request/Response Error
          $ref: '#/components/responses/BaseError'
components:
  securitySchemes:
    APIKeyHeader:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        The API key used to authenticate requests.

        > info
        > Note: This key is only required for requests that access private or user-specific data.
  parameters:
    Accept:
      in: header
      name: Accept
      schema:
        type: string
        default: application/json
        enum:
          - application/json
          - text/calendar
          - text/plain
          - text/html
      required: true
      description: |
        The format to return errors in (if applicable) and, for some endpoints, the format to return the data in.
        In general, we recommend having it set to `application/json`
  responses:
    ICalendar:
      summary: Example iCalendar File
      content:
        text/calendar:
          schema:
            type: string
          example: |
            BEGIN:VCALENDAR
            VERSION:2.0
            PRODID:-//hacksw/handcal//NONSGML v1.0//EN
            BEGIN:VEVENT
            UID:uid1@example.com
            ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
            DTSTAMP:19970701T100000Z
            DTSTART:19970714T170000Z
            DTEND:19970715T040000Z
            SUMMARY:Bastille Day Party
            GEO:48.85299;2.36885
            END:VEVENT
            END:VCALENDAR
    User:
      summary: Example User Data
      content:
        application/json:
          schema:
            type: object
            $ref: '#/components/schemas/User'
          example:
            id: 01KK2M3YM6KDNR4TZFCMV46J2F
            username: therealbenpai
            avatarSource: gravatar
            bannedReason: null
            bannedTerms: []
            bannedBy: null
            team: 1
            personally: null
            emailHash: f4353bfc07ad129aef250603da84be63cbe374dc27064a1c45fd9c59934944df
            avatar: >-
              https://gravatar.com/avatar/f4353bfc07ad129aef250603da84be63cbe374dc27064a1c45fd9c59934944df?d=https%3A%2F%2Favi.avris.it%2Fshape-240%2FdGhlcmVhbGJlbnBhaQ%3D%3D.png&s=240
            profiles:
              - id: 01KK2M4X582Y1T4038WBBCMWAF
                opinions:
                  - icon: keyboard
                    description: Online
                    colour: blue
                    style: italics
                names:
                  - pronunciation: /ˈbɛːnʤəmən/
                    voice: en-US
                    value: Benjamin
                    opinion: 'yes'
                pronouns:
                  - value: 'https://en.pronouns.page/he&they'
                    opinion: 'yes'
                description: Example Description
                age: 18
                links:
                  - 'https://cake.avris.it/gA1'
                linksMetadata:
                  - favicon: null
                    relMe: null
                    nodeinfo: null
                    url: 'https://cake.avris.it/gA1'
                  - favicon: null
                    relMe: null
                    nodeinfo: null
                    url: 'https://github.com/therealbenpai'
                  - favicon: null
                    relMe: null
                    nodeinfo: null
                    url: 'https://spectrum.avris.it/aCQB'
                verifiedLinks: []
                flags:
                  - Demiromantic
                  - Biromantic
                  - Demisexual
                customFlags: []
                words:
                  - header: Honorifics
                    values:
                      - value: '[no honorific]'
                        opinion: check-square
                  - header: Person and family descriptions
                    values:
                      - value: woman
                        opinion: 'no'
                      - value: lady
                        opinion: 'no'
                      - value: dude
                        opinion: 'no'
                      - value: enby
                        opinion: 'no'
                      - value: boy
                        opinion: 'no'
                      - value: girl
                        opinion: 'no'
                  - header: Compliments
                    values:
                      - value: sexy
                        opinion: 'no'
                  - header: Relationship descriptions
                    values:
                      - value: girlfriend
                        opinion: 'no'
                      - value: enbyfriend
                        opinion: 'no'
                      - value: joyfriend
                        opinion: 'no'
                timezone:
                  tz: America/Detroit
                  area: true
                  loc: false
                teamName: Benjamin
                footerName: null
                footerAreas: []
                credentials: []
                credentialsLevel: null
                credentialsName: null
                card: null
                cardDark: null
                circle: []
                sensitive: []
                markdown: true
                events:
                  - holocaust_remembrance_day
                  - asexuality_day
                  - pride_month
                  - LGBTQ+ History Month (US/Canada/Australia)
                  - trans_month
                  - aids_awareness_month
                customEvents: []
                visibility: 0
                access: true
                lastUpdate: 01KK2MKQKHMQ01G2GNSMXQ1CMG
                locale: en
    BaseError:
      summary: Basic Error Response
      content:
        application/json:
          schema:
            type: object
            $ref: '#/components/schemas/ResponseError'
          examples:
            BadRequest:
              summary: Bad Request (400)
              description: The request contains invalid content
              value:
                error: true
                statusCode: 400
                statusMessage: Bad Request
                message: XYZ contains an invalid value
                url: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
            Unauthorised:
              summary: Unauthorised (401)
              description: The user requesting this data is not authorised to access the requested section
              value:
                error: true
                statusCode: 401
                statusMessage: Unauthorised
                message: You are not authorised to access this content
                url: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
            NotFound:
              summary: Item Not Found (404)
              description: The requested item could not be resolved/located
              value:
                error: true
                statusCode: 404
                statusMessage: Not Found
                message: Requested Item Not Found
                url: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
            Removed:
              summary: Version Removed/Depreciated (410)
              description: The requested API version has either been completely removed or marked as depreciated
              value:
                error: true
                statusCode: 410
                statusMessage: Gone
                message: v1 has been marked as depreciated; please use v2 or v3
                url: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
            ServerError:
              summary: Server Error (500)
              description: Unknown Server Error
              value:
                error: true
                statusCode: 500
                statusMessage: Server Error
                message: An unknown server error has occured, please try again later
                url: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
  schemas:
    APIVersion:
      type: object
      title: API Version Information
      required:
        - v
        - support
      properties:
        v:
          type: string
          description: The version identifier (e.g., "v1", "v2").
          example: v1
        support:
          type: string
          description: The support status of the API version (e.g., "Supported", "Depreciated", "Removed").
          example: Primary
          enum:
            - Supported
            - Depreciated
            - Removed
            - Primary
            - Unknown
    ResponseError:
      type: object
      title: Respose Error Data
      required:
        - error
        - statusCode
        - statusMessage
        - message
        - url
      properties:
        statusCode:
          type: number
          description: The HTTP Status Code associated with the error
          example: 404
        error:
          type: boolean
          description: Indicates that the response is an error
          const: true
        statusMessage:
          type: string
          description: The message associated with the error
        message:
          type: string
          description: The message associated with the error (client visible)
          example: Requested Item Not Found
        url:
          type: string
          description: The URL that was requested which resulted in the error
          example: https://en.pronouns.page/api/v1/nouns/search/01JBXS13H8311MFPJYEXCPFZZJ
    MorphemeData:
      type: object
      title: Morpheme Data
      required:
        - pronoun_subject
        - pronoun_object
        - possessive_determiner
        - possessive_pronoun
        - reflexive
      properties:
        pronoun_subject:
          type: string
          description: Subject pronoun (e.g., "they").
          example: they
        pronoun_object:
          type: string
          description: Object pronoun (e.g., "them").
          example: them
        possessive_determiner:
          type: string
          description: Possessive determiner (e.g., "their").
          example: their
        possessive_pronoun:
          type: string
          description: Possessive pronoun (e.g., "theirs").
          example: theirs
        reflexive:
          type: string
          description: Reflexive pronoun (e.g., "themself").
          example: themself
    ID:
      type: string
      description: A unique identifier for an item, typically a 26-character alphanumeric string.
      example: 01KK2M3YM6KDNR4TZFCMV46J2F
    BaseUserSubmittedData:
      type: object
      title: Base User Submitted Data
      required:
        - id
        - locale
        - approved
        - deleted
      properties:
        id:
          $ref: '#/components/schemas/ID'
        locale:
          type: string
          description: The locale associated with the submitted data (e.g., "en" for English).
          example: en
        approved:
          type: boolean
          description: Indicates if the submission has been approved
          example: true
        deleted:
          type: boolean
          description: Indicates if the submission has been marked as deleted
          example: false
    Pronoun:
      type: object
      title: Pronoun Data
      required:
        - canonicalName
        - description
        - normative
        - morphemes
        - pronunciations
        - plural
        - pluralHonorific
        - pronounceable
        - nullPronoun
        - name
      properties:
        canonicalName:
          type: string
          description: The canonical name of the pronoun set (e.g., "they/them").
          example: they/them
        description:
          type: string
          description: A brief description of the pronoun set.
          example: "A commonly used set of gender-neutral pronouns."
        normative:
          type: boolean
          description: Indicates if the pronoun set is considered normative.
          example: true
        morphemes:
          type: object
          description: The morpheme data for the pronoun set.
          $ref: '#/components/schemas/MorphemeData'
        pronunciations:
          type: object
          description: Pronunciation guides for the pronoun set.
        plural:
          type: boolean
          description: Indicates if the pronoun set is plural.
          example: true
        pluralHonorific:
          type: boolean
          description: Indicates if the pronoun set is a plural honorific.
          example: false
        aliases:
          type: array
          description: Alternative names or aliases for the pronoun set.
          items:
            type: string
        history:
          type: string
          description: Historical context or notes about the pronoun set.
        pronounceable:
          type: boolean
          description: Indicates if the pronoun set is easily pronounceable.
          example: true
        thirdForm:
          type: string
          description: A third form of the pronoun set, if applicable.
        smallForm:
          type: string
          description: A smaller or abbreviated form of the pronoun set, if applicable.
        sourcesInfo:
          type: string
          description: Information about the sources of the pronoun set.
        nullPronoun:
          type: boolean
          description: Indicates if the pronoun set is a null pronoun.
          example: false
        examples:
          type: array
          description: Example sentences or phrases using the pronoun set.
          items:
            type: string
        name:
          type: string
          description: A human-readable name for the pronoun set.
          example: They/Them
    SourceBase:
      type: object
      required:
        - pronouns
        - type
        - author
        - title
        - extra
        - year
        - fragments
        - link
        - submitter_id
        - submitter
      properties:
        pronouns:
          type: string
          description: The pronouns associated with the source (e.g., "they").
          example: they
        type:
          type: string
          description: The type of source (e.g., "Book", "Article", "Website").
          example: Book
          enum:
            - Book
            - Article
            - Website
        author:
          type: string
          description: The author of the source.
          example: K. A. Cook
        title:
          type: string
          description: The title of the source.
          example: Crooked Words
        extra:
          type: string
          description: Any extra information about the source.
          example: A short story from a collection called “Crooked Words” by K. A. Cook
        year:
          type: integer
          description: The year the source was published.
          example: 2019
        fragments:
          type: string
          description: A fragment or excerpt from the source that is relevant to the pronouns.
          example: >
            Pat couldn’t help a slight frown as ze got out of hir car. It wasn’t likely
            that someone was going to try and mug a zombie, but even so, the neighbourhood didn’t
            seem all that prosperous. There weren’t even too many cars around, just one down
            the other end of the street and a rusty bike chained to a light post.|Maybe ze shouldn’t
            have waited until ze’d be the last to arrive. What if everyone had come, decided
            that nobody was coming, and gone home already? What if ze was the only one to come
            at all?@This will be fine, Pat told hirself, in what felt like a ridiculous attempt
            to bolster hir courage. If ze had summoned up the courage for hir last job interview—and
            Pat thought ze would have gotten it despite being undead if ze felt remotely inclined
            to try and pass, something that annoyed hir job seeker support officer no end—then
            ze could summon up the courage to do this. This should be easier than a job interview!
        comment:
          type: string
          description: Any comments about the source or its relevance to the pronouns.
          example: First known non-normative use of singular they in published fiction.
          nullable: true
        link:
          type: string
          description: A link to the source or more information about it.
          example: https://www.kacook.com/crooked-words
          nullable: true
        submitter_id:
          $ref: '#/components/schemas/ID'
        base_id:
          $ref: '#/components/schemas/ID'
        key:
          type: string
          description: A key or identifier for the source, often derived from the publication date and title.
          example: 2024/01/01/they-crooked-words
          nullable: true
        images:
          type: string
          description: A comma-separated list of image IDs associated with this source.
          example: 01EX5FA37QHQCEEBBC0W889ZEH,01F8JVNH9FH9DKCJDW1R5J7B0E
          nullable: true
        spoiler:
          type: boolean
          description: Indicates if the source contains spoilers for the pronouns or related content.
          example: false
        submitter:
          type: string
          description: The name of the person who submitted the source.
          example: Jane Doe
        versions:
          type: array
          description: A list of version IDs from other locales associated with this source.
          items:
            $ref: '#/components/schemas/ID'
            nullable: true
    Source:
      type: object
      description: A source associated with a noun or term, containing detailed information about the source material.
      summary: Source Data
      allOf:
        - $ref: '#/components/schemas/BaseUserSubmittedData'
        - $ref: '#/components/schemas/SourceBase'
    NounGenderValues:
      type: object
      properties:
        singular:
          type: array
          description: A list of singular forms
          items:
            $ref: "#/components/schemas/NounWordOrShorthand"
            example: "actor"
        plural:
          type: array
          description: A list of plural forms
          items:
            $ref: "#/components/schemas/NounWordOrShorthand"
            example: "actors"
    NounWordOrShorthand:
      anyOf:
        -
          description: Shorthand which specifies only the spelling and no additional properties
          type: string
        -
          $ref: "#/components/schemas/NounWord"
    NounWord:
      type: object
      properties:
        spelling:
          type: string
        declension:
          type: string
          description: The applicable declension given as key. Only applicable on locales defining noun declensions.
      required:
        - spelling
    Noun:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ID'
        key:
          type: string
          description: A key or identifier for the noun, often derived from the singular form.
          example: "(un)manned"
        words:
          type: object
          properties:
            masc:
              type: object
              description: A list of masculine forms
              $ref: '#/components/schemas/NounGenderValues'
            fem:
              type: object
              description: A list of feminine forms
              $ref: '#/components/schemas/NounGenderValues'
            neutr:
              type: object
              description: A list of neutral forms
              $ref: '#/components/schemas/NounGenderValues'
            nb:
              type: object
              description: >
                A list of nonbinary forms.
                In contrast to neutral forms these forms show explicitely that a nonbinary person is described by them.
                Only applicable on some locales
              $ref: '#/components/schemas/NounGenderValues'
        classInstance:
          type: object
          description: The noun class this entry belongs to. Only applicable on locales where noun conventions are defined.
          nullable: true
        categories:
          type: array
          description: A list of categories or classifications for
          items:
            type: string
            description: >
              A category or classification for the noun (e.g., "determiner", "relationship", "occupation").
              The categories differ between locales.
            example: adjective
        sources:
          type: array
          description: A list of sources associated with the noun. See key of Source.
          items:
            $ref: '#/components/schemas/ID'
        sourcesData:
          type: array
          description: A list of detailed source data objects associated with the noun.
          items:
            type: object
            $ref: '#/components/schemas/Source'
      required:
        - id
        - key
        - words
        - categories
        - sources
    InclusiveBase:
      type: object
      properties:
        insteadOf:
          type: string
          description: The non-inclusive term or phrase that is being replaced by the inclusive alternative.
          example: "“he/she”|“he or she”"
        say:
          type: string
          description: The inclusive alternative that should be used instead of the non-inclusive term or phrase.
          example: "he/she/they (formal)|he, she, or they (formal)|they (formal)"
        because:
          type: string
          description: An explanation of why the non-inclusive term or phrase is problematic and why the inclusive alternative is preferred.
          example: >
            Putting “he/she” or “him/her” in a sentence where the person is hypothetical
            or the gender of the person is unknown assumes that the person it's referring to
            uses either he/him or she/her pronouns, which some people do not.
        base_id:
          $ref: '#/components/schemas/ID'
        author_id:
          $ref: '#/components/schemas/ID'
        categories:
          type: string
          description: A comma-separated list of categories or classifications for the inclusive alternative (e.g., "inclusive language")
          example: transgender,intersex
        links:
          type: array
          description: A list of links to resources or information about the inclusive alternative.
          items:
            type: string
            description: A link to a resource or information about the inclusive alternative.
            example: https://example.com
            nullable: true
        clarification:
          type: string
          description: Any additional clarification or notes about the inclusive alternative.
          example: null
          nullable: true
        author:
          type: string
          description: The username of the author
          example: null
          nullable: true
      required:
        - insteadOf
        - say
        - because
        - categories
    Inclusive:
      type: object
      allOf:
        - $ref: '#/components/schemas/BaseUserSubmittedData'
        - $ref: '#/components/schemas/InclusiveBase'
    TermVersionBase:
      type: object
      properties:
        term:
          type: string
          description: A textual identifier of the term
          example: A-spektrum, aspek
        original:
          type: string
          description: "" # TODO: Add description
          example: ang. a-spectrum, aspec
        definition:
          type: string
          description: "" # TODO: Add description
          example: |-
            termin zbiorczy obejmujący {#Spektrum aromantyczności=spektrum aromantyczności} i {#Spektrum aseksualności=spektrum aseksualności}.
            Używanie go do opisywania wyłącznie spektrum aseksualności jest błędne i prowadzi do {#Wymazywanie aromantyczności=wymazywania aromantyczności}.
            Na {https://sapphic-squirrel.tumblr.com/post/189130109062/hello-everyone-i-want-to-present-a-community-flag=alternatywnej wersji flagi} znajduje się aloes.
        base_id:
          $ref: '#/components/schemas/ID'
        author_id:
          $ref: '#/components/schemas/ID'
        flags:
          type: array
          description: ""  # TODO: Add description
          items:
            type: string
        category:
          type: string
          description: A category or classification for the term (e.g., "orientation", "identity", "relationship")
          example: orientacja seksualna,orientacja romantyczna
        images:
          type: string
          description: A comma-separated list of image IDs associated with this term version
          example: 01EX5FA37QHQCEEBBC0W889ZEH,01F8JVNH9FH9DKCJDW1R5J7B0E
        key:
          type: string
          description: A key or identifier for the term version, often derived from the publication date and term
          example: aspec
        author:
          type: string
          description: The name of the person who submitted the term version
          example: szymon
      required:
        - term
        - original
        - definition
        - base_id
        - author_id
        - flags
        - category
        - images
        - key
        - author
    TermVersion:
      type: object
      allOf:
        - $ref: '#/components/schemas/BaseUserSubmittedData'
        - $ref: '#/components/schemas/TermVersionBase'
    Term:
      type: object
      allOf:
        - $ref: '#/components/schemas/TermVersion'
        - type: object
          properties:
            versions:
              type: array
              description: A list of different versions of the term, often for different locales or with different definitions
              items:
                type: object
                $ref: '#/components/schemas/TermVersion'
    ProfileOption:
      type: object
      properties:
        icon:
          type: string
          description: |
            The icon used on this opinion.
            This is also used as the identifier whenever an option is specified in an object
          example: keyboard
        description:
          type: string
          description: A short description of the opinion being expressed
          example: Online
        colour:
          type: string
          description: The colour associated with this opinion, used for display purposes
          example: blue
        style:
          type: string
          description: The style associated with this opinion, used for display purposes
          example: italics
      required:
        - icon
        - description
        - colour
        - style
    ProfileName:
      type: object
      properties:
        pronunciation:
          type: string
          description: The pronunciation of the name, if applicable
          example: /ˈbɛnʤəmən/
          nullable: true
        voice:
          type: string
          description: The voice associated with this name, used for display purposes
          example: gb
          nullable: true
        value:
          type: string
          description: The name itself
          example: Benjamin
        opinion:
          type: string
          description: The opinion associated with this name, used for display purposes
          example: 'yes'
      required:
        - pronunciation
        - voice
        - value
        - opinion
    ProfilePronoun:
      type: object
      properties:
        value:
          type: string
          description: The pronoun itself
          example: they/them
        opinion:
          type: string
          description: The opinion associated with this pronoun, used for display purposes
          example: 'yes'
      required:
        - value
        - opinion
    ProfileLinkMetadata:
      type: object
      properties:
        link:
          type: string
          description: The link itself
          example: https://cake.avris.it/gA1
        favicon:
          type: string
          description: The link to the website's favicon (website icon)
          example: https://cdn.pronouns.page/favicon-cache/e9ee534650d78e4fe2afdafd2b223102c9c78b5f6488187c0a1dc40dd58068c8.png
        relMe:
          type: array
          description: |
            The links used to identify whether or not there is a <... rel="me"> HTML property linking to this URL,
            used for verifying ownership of the link
          items:
            type: string
            example: null
            nullable: true
        nodeinfo:
          type: object
          description: Information for the node
          example: null
          nullable: true
      required:
        - link
        - favicon
        - relMe
        - nodeinfo
    ProfileWord:
      type: object
      properties:
        value:
          type: string
          description: The word itself
          example: Developer
        opinion:
          type: string
          description: The opinion associated with the word, used for display purposes
          example: 'yes'
      required:
        - value
        - opinion
    ProfileWordSection:
      properties:
        header:
          type: string
          example: Occupation
        words:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/ProfileWord'
      required:
        - header
        - words
    ProfileTimezone:
      type: object
      properties:
        tz:
          type: string
          description: The IANA timezone identifier
          example: America/New_York
        area:
          type: boolean
          description: Whether or not to declare the course area provided in the timezone
          example: true
        loc:
          type: boolean
          description: Whether or not to declare the specific location provided in the timezone
          example: false
    ProfileCircle:
      type: object
      properties:
        username:
          type: string
          description: The username of the user in the circle
          example: Jai-Fern
        avatar:
          type: string
          description: The avatar of the user in the circle
          example: https://cdn.pronouns.page/images/01GYZD29DF3TQ09AXWDWXFW6M2-avatar.png
        circleMutual:
          type: boolean
          description: Whether or not the user in the circle is also in the profile owner's circle
          example: true
        locale:
          type: string
          description: The locale in which the user is in the circle
          example: en
        relationship:
          type: string
          description: A short description of the relationship
          example: Best friend
      required:
        - username
        - avatar
        - circleMutual
        - locale
        - relationship
    ProfileCustomEvent:
      type: object
      properties:
        icon:
          type: string
          description: The icon associated with the event, used for display purposes
          example: user
        name:
          type: string
          description: The name of the event
          example: Birthday
        month:
          type: integer
          description: The month the event occurs on
          example: 12
        day:
          type: integer
          description: The day the event occurs on
          example: 18
        comment:
          type: string
          description: A short comment about the event
          example: The day I was born
      required:
        - icon
        - name
        - month
        - day
        - comment
    Profile:
      type: object
      properties:
        locale:
          type: string
          description: The locale of which the profile is for
          example: en
        id:
          $ref: '#/components/schemas/ID'
        opinions:
          type: array
          description: The custom opinions that the profile declares
          items:
            type: object
            $ref: '#/components/schemas/ProfileOption'
        names:
          type: array
          description: The names that the profile declares
          items:
            type: object
            $ref: '#/components/schemas/ProfileName'
        pronouns:
          type: array
          description: The pronouns that the profile declares
          items:
            type: object
            $ref: '#/components/schemas/ProfilePronoun'
        description:
          type: string
          description: The profile's description/about me section
          example: I am an avid reader and writer.
          nullable: true
        age:
          type: integer
          description: The profile owner's age
          example: 18
          nullable: true
        links:
          type: array
          description: The links that the profile declares
          items:
            type: string
            description: The link itself
            example: https://cake.avris.it/gA1
        linksMetadata:
          type: array
          description: Link Metadata information
          items:
            type: object
            $ref: '#/components/schemas/ProfileLinkMetadata'
        verifiedLinks:
          type: array
          items:
            type: object
            example: {}
        flags:
          type: array
          description: The flags that the user has
          items:
            type: string
            example: Asexual
        customFlags:
          type: array
          description: Custom flags that the user provides
          items:
            type: string
            example: null
            nullable: true
        words:
          type: array
          description: The words that the profile declares
          items:
            type: object
            $ref: '#/components/schemas/ProfileWordSection'
        birthday:
          type: string
          description: The birthday of the user
          example: 2001-05-15
          format: date
          nullable: true
        timezone:
          type: object
          description: The user's timezone
          $ref: '#/components/schemas/ProfileTimezone'
          nullable: true
        teamName:
          type: string
          description: The name used to identify them in the team page (if applicable)
          example: Benjamin
          nullable: true
        footerName:
          type: string
          description: The name used to identify them in the footer (if applicable)
          example: Benjamin
          nullable: true
        footerAreas:
          type: array
          description: The areas in which the user helped in as shown in the footer (if applicable)
          items:
            type: string
            example: Moderation
        credentials:
          type: array
          description: The user's credentials information
          items:
            type: string
            example: null
            nullable: true
        credentialsLevel:
          type: string
          description: ""  # TODO: Add description
          example: null
          nullable: true
        credentialsName:
          type: string
          description: ""  # TODO: Add description
          example: null
          nullable: true
        card:
          type: string
          description: The link to the user's profile card image (if applicable)
          example: https://cdn.pronouns.page/card/en/therealbenpai-01JYF9P18ZFZVEXVY6K96CA0TC.png
          nullable: true
        cardDark:
          type: string
          description: The link to the user's dark mode profile card image (if applicable)
          example: https://cdn.pronouns.page/card/en/therealbenpai-01JYF950M2CYBBP2F0902PDNP3-dark.png
          nullable: true
        circle:
          type: array
          description: The user's declared circle
          items:
            type: object
            $ref: '#/components/schemas/ProfileCircle'
        sensitive:
          type: array
          description: The sensitive topics declared by the user
          items:
            type: string
            example: null
            nullable: true
        events:
          type: array
          description: The events that the user added to their profile
          items:
            type: string
            example: holocaust_remembrance_day
        customEvents:
          type: array
          description: The custom events that the user added to their profile
          items:
            type: object
            $ref: '#/components/schemas/ProfileCustomEvent'
        visibility:
          type: integer
          description: The visibility that the user allows (0 = Internal, 1 = Bots/Scrapers, 2 = Everyone)
          example: 0
          enum:
            - 0
            - 1
            - 2
        access:
          type: boolean
          description: Whether or not the profile is accessible to the requestee
          example: true
        lastUpdate:
          type: string
          description: The ID identifing when the profile was last updated at
          example: 01JY7W5WRKKKGK9WW8AQ6ZKZDX
      required:
        - id
        - options
        - names
        - pronouns
        - description
        - age
        - links
        - linksMetadata
        - verifiedLinks
        - flags
        - customFlags
        - words
        - birthday
        - timezone
        - teamName
        - footerName
        - footerAreas
        - credentials
        - credentialsLevel
        - credentialsName
        - card
        - cardDark
        - circle
        - sensitive
        - events
        - customEvents
        - visibility
        - access
        - lastUpdate
    User:
      type: object
      properties:
        username:
          type: string
          description: The user's username
          example: therealbenpai
        id:
          $ref: '#/components/schemas/ID'
        avatarSource:
          type: string
          description: The source of the user's profile picture
          example: gravatar
          enum:
            - gravatar
            - discord
            - google
            - twitter
            - mastodon
            - indie
            - custom
        bannedReason:
          type: string
          description: The reason that the user was banned for (if available)
          example: null
          nullable: true
        bannedTerms:
          type: array
          description: The specific sections of the ToS in which the user violated
          items:
            type: string
            example: null
        bannedBy:
          $ref: '#/components/schemas/ID'
          description: The user ID of the moderator who banned the user
        team:
          type: boolean
          description: Whether or not the user is a team member
          example: false
        personally:
          type: string
          description: "" # TODO: Add description
          example: null
          nullable: true
        emailHash:
          type: string
          description: The hash of the user's email address (MD5 if old, SHA1 if new)
          example: d09269fb5d35013fc68864abaeb3cd3eeecb9e7224463e2b9b7f25d6657d7b2e
        avatar:
          type: string
          description: The link to the user's avatar
          example: https://gravatar.com/avatar/d09269fb5d35013fc68864abaeb3cd3eeecb9e7224463e2b9b7f25d6657d7b2e?d=https%3A%2F%2Favi.avris.it%2Fshape-240%2FdGhlcmVhbGJlbnBhaQ%3D%3D.png&s=240
        profiles:
          type: array
          description: The profiles that the user has
          items:
            type: object
            $ref: '#/components/schemas/Profile'
      required:
        - username
        - id
        - avatarSource
        - team
        - personally
        - emailHash
        - avatar
        - profiles
    CalendarEventDisplay:
      type: object
      properties:
        type:
          type: string
          description: The type of the calendar event
          example: flag
        name:
          type: string
          description: The name of the calendar event
          example: _red-ribbon
      required:
        - type
        - name
    CalendarEvent:
      type: object
      properties:
        name:
          type: string
          description: The name of the calendar event
          example: hiv_aging_awareness_day
        display:
          type: object
          description: The display information for the calendar event
          $ref: '#/components/schemas/CalendarEventDisplay'
        month:
          type: integer
          description: The month the calendar event occurs on
          example: 9
        level:
          type: integer
          enum:
            - 0
            - 1
            - 2
            - 3
            - 4
          description: >
            The level of the calendar event.
            0 means it spans a whole month,
            1 means it spans a whole week,
            2 means it is a name day,
            3 means it spans a single day,
            4 means it is a custom, user-defined event (e.g. an individual birthday).
          example: 3
        terms:
          type: array
          description: The terms associated with the calendar event. See key of Term
          items:
            type: string
            example: aids
        localCalendar:
          type: string
          description: The date as specified in a local, non-gregorian calendar
          example: Paush 6 / पौष ६
          nullable: true
        comment:
          type: string
          description: A comment about the calendar event
          example: "A day to raise awareness about the unique challenges faced by individuals living with HIV/AIDS as they age."
          nullable: true
      required:
        - name
        - display
        - month
        - level
        - terms
        - localCalendar
        - comment
    Calendar:
      type: object
      properties:
        day:
          type: string
          description: The date of the calendar day in ISO 8601 format (YYYY-MM-DD)
          example: 2025-09-19
          format: date
        link:
          type: string
          description: A link to more information about the calendar day and its events
          example: https://en.pronouns.page/calendar/2025-09-18
        image:
          type: string
          description: A link to an image representing the calendar day and its events
          example: https://en.pronouns.page/calendar/en/2025-09-18.png
        message:
          type: string
          description: A human-readable summary describing the calendar day and its events
        events:
          type: array
          description: A list of the names of the calendar events occurring on this day
          items:
            type: string
            example: HIV/AIDS and Aging Awareness Day
        eventsRaw:
          type: array
          description: A list of the calendar events occurring on this day with their full information
          items:
            type: object
            $ref: '#/components/schemas/CalendarEvent'
      required:
        - day
        - link
        - image
        - message
        - events
        - eventsRaw
