openapi: 3.1.0 info: title: Harbor Challenges Redemptions 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: Redemptions description: Operations for managing reward redemption requests from members. paths: /communities/{communityId}/redemptions: get: operationId: listRedemptions summary: Harbor List redemptions description: Returns a paginated list of reward redemption requests from community members. Can be filtered by status (pending, approved, fulfilled, rejected) for fulfillment workflow management. tags: - Redemptions parameters: - $ref: '#/components/parameters/communityIdParam' - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/limitParam' - name: status in: query description: Filter by redemption status. schema: type: string enum: - pending - approved - fulfilled - rejected responses: '200': description: List of redemptions. content: application/json: schema: $ref: '#/components/schemas/RedemptionList' '401': description: Unauthorized. post: operationId: createRedemption summary: Harbor Create a redemption request description: Submits a redemption request on behalf of a member for a specific reward from the catalog. Deducts the reward's point cost from the member's balance if they have sufficient points. tags: - Redemptions parameters: - $ref: '#/components/parameters/communityIdParam' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateRedemptionRequest' responses: '201': description: Redemption created. content: application/json: schema: $ref: '#/components/schemas/Redemption' '400': description: Insufficient points or reward unavailable. '401': description: Unauthorized. 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 communityIdParam: name: communityId in: path required: true description: The unique identifier of the Harbor community. schema: type: string schemas: RedemptionList: type: object description: Paginated list of redemptions. properties: data: type: array description: Array of redemption objects. items: $ref: '#/components/schemas/Redemption' total: type: integer description: Total number of redemptions. page: type: integer description: Current page number. limit: type: integer description: Results per page. CreateRedemptionRequest: type: object description: Request body for creating a reward redemption. required: - memberId - rewardId properties: memberId: type: string description: Identifier of the member redeeming the reward. rewardId: type: string description: Identifier of the reward to redeem. shippingAddress: type: object description: Shipping address for physical reward redemptions. properties: name: type: string description: Recipient name. line1: type: string description: Address line 1. line2: type: string description: Address line 2. city: type: string description: City. state: type: string description: State or province. postalCode: type: string description: Postal code. country: type: string description: ISO 3166-1 alpha-2 country code. pattern: ^[A-Z]{2}$ Reward: type: object description: A reward available for redemption in the community catalog. properties: id: type: string description: Unique reward identifier. communityId: type: string description: Community this reward belongs to. title: type: string description: Reward display title. description: type: string description: Detailed reward description. pointCost: type: integer description: Number of points required to redeem this reward. minimum: 1 type: type: string description: Reward type. enum: - discount_code - physical_item - digital_download - experience - custom status: type: string description: Availability status. enum: - active - inactive - sold_out quantity: type: integer description: Total quantity available. Null for unlimited. remainingQuantity: type: integer description: Current remaining quantity. imageUrl: type: string format: uri description: URL of the reward image. Redemption: type: object description: A reward redemption request from a community member. properties: id: type: string description: Unique redemption identifier. communityId: type: string description: Community this redemption belongs to. memberId: type: string description: Member who requested the redemption. rewardId: type: string description: Reward being redeemed. reward: $ref: '#/components/schemas/Reward' pointsSpent: type: integer description: Points deducted for this redemption. status: type: string description: Current redemption status. enum: - pending - approved - fulfilled - rejected fulfillmentData: type: object description: Fulfillment data such as discount codes or shipping information. additionalProperties: true createdAt: type: string format: date-time description: When the redemption was requested. updatedAt: type: string format: date-time description: When the redemption was last updated. 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/