Harbor Members API

Operations for managing community members, their profiles, point balances, and tier status.

OpenAPI Specification

harbor-members-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Harbor Challenges Members API
  description: The Harbor API enables programmatic access to the Harbor community platform, allowing brands to manage their superfan community, rewards programs, and engagement features. Harbor is a no-code tool that lets brands build owned community platforms where superfans can engage and earn rewards. The API provides endpoints for managing members, challenges, rewards, redemptions, leaderboards, and community events. Authentication uses bearer tokens obtained via OAuth 2.0 client credentials.
  version: v1
  contact:
    name: Harbor Support
    url: https://www.harbor.gg/
  termsOfService: https://www.harbor.gg/terms
servers:
- url: https://api.harbor.gg/v1
  description: Harbor API Production Server
security:
- bearerAuth: []
tags:
- name: Members
  description: Operations for managing community members, their profiles, point balances, and tier status.
paths:
  /communities/{communityId}/members:
    get:
      operationId: listMembers
      summary: Harbor List community members
      description: Returns a paginated list of members belonging to the specified community. Results can be filtered by tier, status, or join date and are sorted by points balance or join date by default.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/communityIdParam'
      - $ref: '#/components/parameters/pageParam'
      - $ref: '#/components/parameters/limitParam'
      - name: tier
        in: query
        description: Filter members by loyalty tier name.
        schema:
          type: string
      - name: status
        in: query
        description: Filter by member status.
        schema:
          type: string
          enum:
          - active
          - inactive
          - banned
      responses:
        '200':
          description: Paginated list of members.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberList'
        '401':
          description: Unauthorized. Missing or invalid bearer token.
        '404':
          description: Community not found.
    post:
      operationId: createMember
      summary: Harbor Create a community member
      description: Registers a new member in the specified community. The member is associated with an external user identifier from the brand's platform. An optional referral code can be provided to credit the referrer.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/communityIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMemberRequest'
      responses:
        '201':
          description: Member created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        '400':
          description: Bad request. Invalid member data.
        '401':
          description: Unauthorized.
        '409':
          description: Member with this external ID already exists.
  /communities/{communityId}/members/{memberId}:
    get:
      operationId: getMember
      summary: Harbor Get a community member
      description: Returns the profile and engagement data for a specific member, including their point balance, tier, referral code, and challenge completion history.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/communityIdParam'
      - $ref: '#/components/parameters/memberIdParam'
      responses:
        '200':
          description: Member details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        '401':
          description: Unauthorized.
        '404':
          description: Member not found.
    patch:
      operationId: updateMember
      summary: Harbor Update a community member
      description: Updates profile fields or status for an existing community member. Supports partial updates — only the fields provided in the request body are modified.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/communityIdParam'
      - $ref: '#/components/parameters/memberIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMemberRequest'
      responses:
        '200':
          description: Updated member.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        '400':
          description: Bad request.
        '401':
          description: Unauthorized.
        '404':
          description: Member not found.
  /communities/{communityId}/members/{memberId}/points:
    post:
      operationId: awardPoints
      summary: Harbor Award points to a member
      description: Awards a specified number of points to a community member. Used for custom point events outside of standard challenges, such as purchase rewards, anniversary bonuses, or manual adjustments. A description is required to explain the reason for the award.
      tags:
      - Members
      parameters:
      - $ref: '#/components/parameters/communityIdParam'
      - $ref: '#/components/parameters/memberIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AwardPointsRequest'
      responses:
        '200':
          description: Points awarded. Updated member balance returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointsBalance'
        '400':
          description: Bad request.
        '401':
          description: Unauthorized.
        '404':
          description: Member not found.
components:
  parameters:
    limitParam:
      name: limit
      in: query
      description: Number of results per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    pageParam:
      name: page
      in: query
      description: Page number for pagination (1-based).
      schema:
        type: integer
        minimum: 1
        default: 1
    memberIdParam:
      name: memberId
      in: path
      required: true
      description: The unique identifier of the community member.
      schema:
        type: string
    communityIdParam:
      name: communityId
      in: path
      required: true
      description: The unique identifier of the Harbor community.
      schema:
        type: string
  schemas:
    CreateMemberRequest:
      type: object
      description: Request body for registering a new community member.
      required:
      - externalId
      properties:
        externalId:
          type: string
          description: The brand's unique identifier for this user.
        displayName:
          type: string
          description: Member's display name.
          maxLength: 100
        email:
          type: string
          format: email
          description: Member's email address.
        referralCode:
          type: string
          description: Referral code provided by an existing member.
        metadata:
          type: object
          description: Optional additional metadata to store with the member.
          additionalProperties: true
    Member:
      type: object
      description: A community member representing a superfan registered on the Harbor platform.
      properties:
        id:
          type: string
          description: Unique Harbor member identifier.
        externalId:
          type: string
          description: The brand's external user identifier used to link the Harbor member to the brand's own user account.
        communityId:
          type: string
          description: Identifier of the community this member belongs to.
        displayName:
          type: string
          description: Member's display name shown in the community.
        email:
          type: string
          format: email
          description: Member's email address.
        pointsBalance:
          type: integer
          description: Current point balance available for redemption.
          minimum: 0
        totalPointsEarned:
          type: integer
          description: Total lifetime points earned by the member.
          minimum: 0
        tier:
          $ref: '#/components/schemas/Tier'
        referralCode:
          type: string
          description: Unique referral code this member can share to earn referral rewards.
        status:
          type: string
          description: Current membership status.
          enum:
          - active
          - inactive
          - banned
        joinedAt:
          type: string
          format: date-time
          description: Timestamp when the member joined the community.
        lastActiveAt:
          type: string
          format: date-time
          description: Timestamp of the member's last activity.
    AwardPointsRequest:
      type: object
      description: Request body for awarding points to a community member.
      required:
      - points
      - description
      properties:
        points:
          type: integer
          description: Number of points to award. Must be a positive integer.
          minimum: 1
        description:
          type: string
          description: Human-readable reason for the point award.
          maxLength: 500
        metadata:
          type: object
          description: Optional metadata about this point transaction.
          additionalProperties: true
    PointsBalance:
      type: object
      description: Updated points balance after a transaction.
      properties:
        memberId:
          type: string
          description: Member identifier.
        pointsAwarded:
          type: integer
          description: Points awarded in this transaction.
        newBalance:
          type: integer
          description: Member's new point balance after the award.
        totalPointsEarned:
          type: integer
          description: Updated lifetime points total.
    MemberList:
      type: object
      description: Paginated list of community members.
      properties:
        data:
          type: array
          description: Array of member objects.
          items:
            $ref: '#/components/schemas/Member'
        total:
          type: integer
          description: Total number of members matching the query.
        page:
          type: integer
          description: Current page number.
        limit:
          type: integer
          description: Results per page.
    UpdateMemberRequest:
      type: object
      description: Request body for updating a community member's profile.
      properties:
        displayName:
          type: string
          description: Updated display name.
          maxLength: 100
        email:
          type: string
          format: email
          description: Updated email address.
        status:
          type: string
          description: Updated membership status.
          enum:
          - active
          - inactive
          - banned
        metadata:
          type: object
          description: Updated metadata key-value pairs.
          additionalProperties: true
    Tier:
      type: object
      description: Loyalty tier a member has achieved.
      properties:
        id:
          type: string
          description: Tier identifier.
        name:
          type: string
          description: Tier display name (e.g., Bronze, Silver, Gold).
        pointsRequired:
          type: integer
          description: Minimum lifetime points required to reach this tier.
        benefits:
          type: array
          description: List of benefits associated with this tier.
          items:
            type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token obtained via OAuth 2.0 client credentials flow. Contact Harbor to obtain API credentials.
externalDocs:
  description: Harbor API Documentation
  url: https://api.harbor.gg/