> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myabode.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve a user

> 404 NOT_FOUND when the person has no membership this key can read. Requires `users:read`.



## OpenAPI

````yaml https://api.myabode.ca/v1/openapi.json get /v1/users/{id}
openapi: 3.1.1
info:
  title: myAbode Public API
  version: 1.0.0
  description: >-
    The `/v1` surface. Authenticate with `Authorization: Bearer mya_…`. A member
    key reads what its member reads; a service key reads its brokerage. Every
    failure is an RFC 9457 Problem Details body served as
    `application/problem+json`; branch on its `code`.
servers:
  - url: https://api.myabode.ca
security:
  - apiKey: []
paths:
  /v1/users/{id}:
    get:
      summary: Retrieve a user
      description: >-
        404 NOT_FOUND when the person has no membership this key can read.
        Requires `users:read`.
      operationId: users.get
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: >-
            A parameter failed validation — a filter, a paging value or the path
            id. `errors[]` names each rejected value with a JSON Pointer. A
            `cursor` this API cannot read, or one sent with a different `sort`,
            is `INVALID_CURSOR` and fails the same way on every retry: drop it
            and re-run the initial sync (on `/v1/events`, from `start=latest`,
            as for a 410).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: >-
            No `Authorization: Bearer mya_…` header (`API_KEY_REQUIRED`), or a
            credential this API will not accept (`API_KEY_INVALID`). Unknown,
            revoked and expired keys are one outcome.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: >-
            The key is valid but does not hold the scope this route requires
            (`INSUFFICIENT_SCOPE`).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: >-
            No such resource, or none this key may read — the two answers are
            identical bar `request_id` (`NOT_FOUND`).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          description: >-
            The key spent its per-minute request budget (`RATE_LIMITED`).
            `Retry-After` carries the seconds to wait.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    User:
      type: object
      properties:
        object:
          const: user
        id:
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
        memberships:
          type: array
          items:
            type: object
            properties:
              brokerage:
                type: string
              name:
                anyOf:
                  - type: string
                  - type: 'null'
              email:
                anyOf:
                  - type: string
                  - type: 'null'
              status:
                enum:
                  - active
                  - inactive
                type: string
                description: >-
                  Membership status. New values may be added; this is not a
                  breaking change. Handle unknown values.
              roles:
                type: array
                items:
                  type: object
                  properties:
                    role:
                      enum:
                        - system_admin
                        - org_admin
                        - brokerage_admin
                        - office_admin
                        - team_leader
                        - deal_processor
                        - closing_processor
                        - listing_processor
                        - deal_processor_manager
                        - agent
                        - assistant
                      type: string
                      description: >-
                        Role. New values may be added; this is not a breaking
                        change. Handle unknown values.
                    scope:
                      type: object
                      properties:
                        type:
                          enum:
                            - brokerage
                            - office
                            - team
                          type: string
                          description: >-
                            Role scope type. New values may be added; this is
                            not a breaking change. Handle unknown values.
                        id:
                          anyOf:
                            - type: string
                            - type: 'null'
                      required:
                        - type
                        - id
                      additionalProperties: false
                  required:
                    - role
                    - scope
                  additionalProperties: false
              office:
                anyOf:
                  - type: string
                  - type: 'null'
              team:
                anyOf:
                  - type: string
                  - type: 'null'
            required:
              - brokerage
              - name
              - email
              - status
              - roles
              - office
              - team
            additionalProperties: false
      required:
        - object
        - id
        - name
        - memberships
      additionalProperties: false
      description: >-
        A person with a role binding or membership in at least one brokerage
        this key may read, with one membership per such brokerage. Each
        membership carries the name and email that brokerage holds. Filters
        choose users; they never trim `memberships`.
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        detail:
          type: string
        code:
          type: string
        request_id:
          type: string
        errors:
          type: array
          items:
            type: object
            properties:
              pointer:
                type: string
              code:
                type: string
              detail:
                type: string
              resource:
                type: string
            required:
              - pointer
              - code
              - detail
      required:
        - type
        - title
        - status
        - detail
        - code
        - request_id
      additionalProperties: false
      description: >-
        RFC 9457 Problem Details — the only error body the `/v1` surface emits,
        served as `application/problem+json` on every failure. Branch on `code`,
        not on `title` or `detail`; quote `request_id` (also the `Request-Id`
        response header) in a support request. `errors` is present only on a
        400, carrying one entry per rejected field.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        An API key of the form `mya_…`, sent as `Authorization: Bearer mya_…`.
        The secret is shown once, when the key is created.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.