Bo Kendell Profile API

The Profile API from Bo Kendell — 2 operation(s) for profile.

Operations 2

GET /api/v1/profiles List profiles #
GET /api/v1/profiles/{id} Get profile by id #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bokendell-com:bokendell-com-profile-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bokendell-com-profile-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Portfolio Profile API
  version: 1.0.0
  description: 'Portfolio oRPC + REST API

    ## Versioning and deprecation


    The version is in the URL path (`/api/v1/...`). A breaking change ships as a new path segment (`/api/v2`); anything additive lands in place.


    Nothing is removed silently. When an operation is scheduled for removal its responses start carrying a `Deprecation` header (draft-ietf-httpapi-deprecation-header) on the day the decision takes effect, and an RFC 8594 `Sunset` header once a removal date is committed — always at least 90 days out. Both are declared in `components.headers`, so an agent can watch for them mechanically rather than trusting this paragraph.


    Every 4xx and 5xx body is the `Error` schema: a machine-readable `code`, a human-readable `message`, and a `data` object repeating the code and HTTP status. Input-validation failures additionally carry raw Zod `issues`.'
servers:
- url: https://api.bokendell.com
security:
- cookieAuth: []
tags:
- name: Profile
paths:
  /api/v1/profiles:
    get:
      operationId: v1.profile.list
      summary: List profiles
      description: Returns the site owner's profile — name, bio, summary, contact details, languages, and images — as a single-element array; this is a single-profile site.
      tags:
      - Profile
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      format: uuid
                    name:
                      type: string
                    bio:
                      type: string
                    summary:
                      anyOf:
                      - type: string
                      - type: 'null'
                    email:
                      anyOf:
                      - type: string
                      - type: 'null'
                    phone:
                      anyOf:
                      - type: string
                      - type: 'null'
                    location:
                      anyOf:
                      - type: string
                      - type: 'null'
                    imageFileId:
                      anyOf:
                      - type: string
                        format: uuid
                      - type: 'null'
                    imageFile:
                      anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                          bucket:
                            type: string
                          storageKey:
                            type: string
                          storageUrl:
                            type: string
                            format: uri
                          url:
                            type: string
                            format: uri
                          filename:
                            type: string
                          originalFilename:
                            type: string
                          mimeType:
                            type: string
                          sizeBytes:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          width:
                            anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                            - type: 'null'
                          height:
                            anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                            - type: 'null'
                          category:
                            type: string
                          isPublic:
                            type: boolean
                          status:
                            enum:
                            - pending
                            - confirmed
                            - failed
                            type: string
                          metadata:
                            anyOf:
                            - type: object
                              propertyNames:
                                type: string
                              additionalProperties: {}
                            - type: 'null'
                          uploadedBy:
                            anyOf:
                            - type: string
                              format: uuid
                            - type: 'null'
                          checksum:
                            anyOf:
                            - type: string
                            - type: 'null'
                          createdAt:
                            type: string
                            format: date-time
                          updatedAt:
                            type: string
                            format: date-time
                        required:
                        - id
                        - bucket
                        - storageKey
                        - storageUrl
                        - url
                        - filename
                        - originalFilename
                        - mimeType
                        - sizeBytes
                        - width
                        - height
                        - category
                        - isPublic
                        - status
                        - metadata
                        - uploadedBy
                        - checksum
                        - createdAt
                        - updatedAt
                      - type: 'null'
                    contactImageFileId:
                      anyOf:
                      - type: string
                        format: uuid
                      - type: 'null'
                    contactImageFile:
                      anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                          bucket:
                            type: string
                          storageKey:
                            type: string
                          storageUrl:
                            type: string
                            format: uri
                          url:
                            type: string
                            format: uri
                          filename:
                            type: string
                          originalFilename:
                            type: string
                          mimeType:
                            type: string
                          sizeBytes:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          width:
                            anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                            - type: 'null'
                          height:
                            anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                            - type: 'null'
                          category:
                            type: string
                          isPublic:
                            type: boolean
                          status:
                            enum:
                            - pending
                            - confirmed
                            - failed
                            type: string
                          metadata:
                            anyOf:
                            - type: object
                              propertyNames:
                                type: string
                              additionalProperties: {}
                            - type: 'null'
                          uploadedBy:
                            anyOf:
                            - type: string
                              format: uuid
                            - type: 'null'
                          checksum:
                            anyOf:
                            - type: string
                            - type: 'null'
                          createdAt:
                            type: string
                            format: date-time
                          updatedAt:
                            type: string
                            format: date-time
                        required:
                        - id
                        - bucket
                        - storageKey
                        - storageUrl
                        - url
                        - filename
                        - originalFilename
                        - mimeType
                        - sizeBytes
                        - width
                        - height
                        - category
                        - isPublic
                        - status
                        - metadata
                        - uploadedBy
                        - checksum
                        - createdAt
                        - updatedAt
                      - type: 'null'
                    contactText:
                      anyOf:
                      - type: string
                      - type: 'null'
                    languages:
                      type: array
                      items:
                        type: object
                        properties:
                          name:
                            type: string
                            minLength: 1
                            maxLength: 60
                          proficiency:
                            enum:
                            - native
                            - fluent
                            - conversational
                            - basic
                            type: string
                        required:
                        - name
                        - proficiency
                    createdAt:
                      type: string
                      format: date-time
                    updatedAt:
                      type: string
                      format: date-time
                  required:
                  - id
                  - name
                  - bio
                  - summary
                  - email
                  - phone
                  - location
                  - imageFileId
                  - imageFile
                  - contactImageFileId
                  - contactImageFile
                  - contactText
                  - languages
                  - createdAt
                  - updatedAt
        '401':
          description: UNAUTHORIZED — 401
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: FORBIDDEN — 403
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: NOT_FOUND — 404
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: CONFLICT — 409
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: INPUT_VALIDATION_FAILED — 422
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: TOO_MANY_REQUESTS — 429
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/profiles/{id}:
    get:
      operationId: v1.profile.getById
      summary: Get profile by id
      description: Returns the profile only when `id` matches the single profile's id; any other id responds 404. Prefer `list`, which needs no id.
      tags:
      - Profile
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          description: UUID identifier
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  name:
                    type: string
                  bio:
                    type: string
                  summary:
                    anyOf:
                    - type: string
                    - type: 'null'
                  email:
                    anyOf:
                    - type: string
                    - type: 'null'
                  phone:
                    anyOf:
                    - type: string
                    - type: 'null'
                  location:
                    anyOf:
                    - type: string
                    - type: 'null'
                  imageFileId:
                    anyOf:
                    - type: string
                      format: uuid
                    - type: 'null'
                  imageFile:
                    anyOf:
                    - type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        bucket:
                          type: string
                        storageKey:
                          type: string
                        storageUrl:
                          type: string
                          format: uri
                        url:
                          type: string
                          format: uri
                        filename:
                          type: string
                        originalFilename:
                          type: string
                        mimeType:
                          type: string
                        sizeBytes:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          exclusiveMinimum: 0
                        width:
                          anyOf:
                          - type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          - type: 'null'
                        height:
                          anyOf:
                          - type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          - type: 'null'
                        category:
                          type: string
                        isPublic:
                          type: boolean
                        status:
                          enum:
                          - pending
                          - confirmed
                          - failed
                          type: string
                        metadata:
                          anyOf:
                          - type: object
                            propertyNames:
                              type: string
                            additionalProperties: {}
                          - type: 'null'
                        uploadedBy:
                          anyOf:
                          - type: string
                            format: uuid
                          - type: 'null'
                        checksum:
                          anyOf:
                          - type: string
                          - type: 'null'
                        createdAt:
                          type: string
                          format: date-time
                        updatedAt:
                          type: string
                          format: date-time
                      required:
                      - id
                      - bucket
                      - storageKey
                      - storageUrl
                      - url
                      - filename
                      - originalFilename
                      - mimeType
                      - sizeBytes
                      - width
                      - height
                      - category
                      - isPublic
                      - status
                      - metadata
                      - uploadedBy
                      - checksum
                      - createdAt
                      - updatedAt
                    - type: 'null'
                  contactImageFileId:
                    anyOf:
                    - type: string
                      format: uuid
                    - type: 'null'
                  contactImageFile:
                    anyOf:
                    - type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        bucket:
                          type: string
                        storageKey:
                          type: string
                        storageUrl:
                          type: string
                          format: uri
                        url:
                          type: string
                          format: uri
                        filename:
                          type: string
                        originalFilename:
                          type: string
                        mimeType:
                          type: string
                        sizeBytes:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          exclusiveMinimum: 0
                        width:
                          anyOf:
                          - type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          - type: 'null'
                        height:
                          anyOf:
                          - type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                            exclusiveMinimum: 0
                          - type: 'null'
                        category:
                          type: string
                        isPublic:
                          type: boolean
                        status:
                          enum:
                          - pending
                          - confirmed
                          - failed
                          type: string
                        metadata:
                          anyOf:
                          - type: object
                            propertyNames:
                              type: string
                            additionalProperties: {}
                          - type: 'null'
                        uploadedBy:
                          anyOf:
                          - type: string
                            format: uuid
                          - type: 'null'
                        checksum:
                          anyOf:
                          - type: string
                          - type: 'null'
                        createdAt:
                          type: string
                          format: date-time
                        updatedAt:
                          type: string
                          format: date-time
                      required:
                      - id
                      - bucket
                      - storageKey
                      - storageUrl
                      - url
                      - filename
                      - originalFilename
                      - mimeType
                      - sizeBytes
                      - width
                      - height
                      - category
                      - isPublic
                      - status
                      - metadata
                      - uploadedBy
                      - checksum
                      - createdAt
                      - updatedAt
                    - type: 'null'
                  contactText:
                    anyOf:
                    - type: string
                    - type: 'null'
                  languages:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          minLength: 1
                          maxLength: 60
                        proficiency:
                          enum:
                          - native
                          - fluent
                          - conversational
                          - basic
                          type: string
                      required:
                      - name
                      - proficiency
                  createdAt:
                    type: string
                    format: date-time
                  updatedAt:
                    type: string
                    format: date-time
                required:
                - id
                - name
                - bio
                - summary
                - email
                - phone
                - location
                - imageFileId
                - imageFile
                - contactImageFileId
                - contactImageFile
                - contactText
                - languages
                - createdAt
                - updatedAt
        '401':
          description: UNAUTHORIZED — 401
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: FORBIDDEN — 403
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: NOT_FOUND — 404
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: CONFLICT — 409
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: INPUT_VALIDATION_FAILED — 422
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: TOO_MANY_REQUESTS — 429
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      title: Error
      description: Every 4xx and 5xx response body. `code` is the machine-readable discriminator; `message` is human-readable and safe to surface. The HTTP status is on the response itself and repeated at `data.httpStatus`.
      required:
      - code
      - message
      - data
      properties:
        code:
          type: string
          description: Machine-readable error code, e.g. NOT_FOUND. Matches `data.code`.
          examples:
          - NOT_FOUND
          - BAD_REQUEST
          - UNAUTHORIZED
          - INTERNAL_SERVER_ERROR
        message:
          type: string
          description: Human-readable explanation.
        data:
          type: object
          description: Structured detail. Always carries `code` and `httpStatus`; typed errors declared by an operation spread their own fields in alongside.
          required:
          - code
          - httpStatus
          properties:
            code:
              type: string
              description: Repeats the top-level `code`.
            httpStatus:
              type: integer
              description: Repeats the response's HTTP status.
            errorCode:
              type: string
              description: The originating domain error code, when the failure came from a domain service.
            details:
              type:
              - object
              - 'null'
              description: Domain-supplied detail, when present.
            path:
              type: string
              description: Dotted procedure path that failed.
          additionalProperties: true
        issues:
          type: array
          description: Raw Zod issues. Present only on input-validation failures.
          items:
            type: object
            additionalProperties: true
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: better-auth.session_token
      description: Better Auth session cookie