Hifi Transfer Approvals API
Transfer approval workflow and admin actions
Transfer approval workflow and admin actions
openapi: 3.0.0
info:
title: Hifi Account Transfer Approvals API
version: 2.0.0
description: API documentation for Hifi
servers:
- url: https://production.hifibridge.com
description: Production server
- url: https://sandbox.hifibridge.com
description: Sandbox server
security:
- bearerAuth: []
tags:
- name: Transfer Approvals
description: Transfer approval workflow and admin actions
paths:
/v2/transfer-approvals:
get:
tags:
- Transfer Approvals
summary: List all pending transfer approvals
description: Retrieve all pending transfer approvals that require admin action
parameters:
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 20
description: Number of approvals to return
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
description: Number of approvals to skip
responses:
'200':
description: Transfer approvals retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetTransferApprovalsResponse'
'401':
$ref: '#/components/responses/UnauthorizedResponse'
'404':
$ref: '#/components/responses/NotFoundResponse'
'500':
$ref: '#/components/responses/InternalServerErrorResponse'
/v2/transfer-approvals/{approvalId}/approve:
post:
tags:
- Transfer Approvals
summary: Approve a transfer
description: Approve a pending transfer. If enough approvals are received, the transfer will be queued for execution.
parameters:
- name: approvalId
in: path
required: true
schema:
type: string
format: uuid
description: ID of the transfer approval
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApproveTransferRequest'
responses:
'200':
description: Transfer approval recorded successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApproveTransferResponse'
'401':
$ref: '#/components/responses/UnauthorizedResponse'
'404':
$ref: '#/components/responses/NotFoundResponse'
'500':
$ref: '#/components/responses/InternalServerErrorResponse'
/v2/transfer-approvals/{approvalId}/reject:
post:
tags:
- Transfer Approvals
summary: Reject a transfer
description: Reject a pending transfer. This will cancel the transfer and return funds to the sender.
parameters:
- name: approvalId
in: path
required: true
schema:
type: string
format: uuid
description: ID of the transfer approval
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RejectTransferRequest'
responses:
'200':
description: Transfer rejected successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RejectTransferResponse'
'401':
$ref: '#/components/responses/UnauthorizedResponse'
'404':
$ref: '#/components/responses/NotFoundResponse'
'500':
$ref: '#/components/responses/InternalServerErrorResponse'
/v2/transfer-approvals/{approvalId}:
get:
tags:
- Transfer Approvals
summary: Get a transfer approval
description: Retrieve detailed information about a specific transfer approval
parameters:
- name: approvalId
in: path
required: true
schema:
type: string
format: uuid
description: ID of the transfer approval
responses:
'200':
description: Transfer approval details retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetTransferApprovalResponse'
'401':
$ref: '#/components/responses/UnauthorizedResponse'
'404':
$ref: '#/components/responses/NotFoundResponse'
'500':
$ref: '#/components/responses/InternalServerErrorResponse'
components:
responses:
InternalServerErrorResponse:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/InternalServerError'
NotFoundResponse:
description: Resource not found
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum:
- error
error:
type: object
properties:
code:
type: string
message:
type: string
UnauthorizedResponse:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
schemas:
ApprovalVote:
type: object
properties:
approverId:
type: string
format: uuid
example: profile-789-e89b-12d3-a456-426614174006
description: ID of the approver who cast the vote
vote:
type: string
enum:
- APPROVE
- REJECT
example: APPROVE
description: The vote cast by the approver
comment:
type: string
nullable: true
example: Approved after reviewing transaction details
description: Optional comment explaining the vote decision
createdAt:
type: string
format: date-time
example: '2024-01-15T11:00:00.000Z'
description: When the vote was cast
Unauthorized:
type: object
properties:
error:
type: string
example: Not authorized
RejectTransferRequest:
type: object
description: Request body for rejecting a transfer
properties:
reason:
type: string
maxLength: 1000
description: Reason for rejecting the transfer
example: Transfer amount exceeds daily limit
ApproveTransferResponse:
type: object
properties:
success:
type: boolean
example: true
description: Whether the operation was successful
message:
type: string
example: Transfer approved and initiated successfully
description: Human-readable message about the operation
approvalId:
type: string
format: uuid
description: ID of the approval being processed
example: approval-123-e89b-12d3-a456-426614174002
status:
type: string
enum:
- APPROVED
example: APPROVED
description: Current status after approval
timestamp:
type: string
format: date-time
description: When the approval was processed
example: '2024-01-15T11:00:00.000Z'
InternalServerError:
type: object
properties:
error:
type: string
example: Unexpected error happened
TransferApprovalSummary:
type: object
properties:
id:
type: string
format: uuid
example: approval-123-e89b-12d3-a456-426614174002
transferId:
type: string
format: uuid
example: transfer-456-e89b-12d3-a456-426614174003
status:
type: string
enum:
- PENDING
- APPROVED
- REJECTED
- EXPIRED
example: PENDING
description: Current status of the approval process
createdAt:
type: string
format: date-time
example: '2024-01-15T10:30:00.000Z'
updatedAt:
type: string
format: date-time
example: '2024-01-15T11:00:00.000Z'
description: When the approval was last updated
transferType:
type: string
enum:
- WALLET.TRANSFER
- WALLET.TRANSFER.BATCH
- WALLET.BRIDGE
example: WALLET.TRANSFER
description: Type of transfer requiring approval
TransferApprovalDetail:
type: object
properties:
id:
type: string
format: uuid
example: approval-123-e89b-12d3-a456-426614174002
transferId:
type: string
format: uuid
example: transfer-456-e89b-12d3-a456-426614174003
status:
type: string
enum:
- PENDING
- APPROVED
- REJECTED
- EXPIRED
example: PENDING
description: Current status of the approval process
createdAt:
type: string
format: date-time
example: '2024-01-15T10:30:00.000Z'
updatedAt:
type: string
format: date-time
example: '2024-01-15T11:00:00.000Z'
description: When the approval was last updated
transferType:
type: string
enum:
- WALLET.TRANSFER
- WALLET.TRANSFER.BATCH
- WALLET.BRIDGE
example: WALLET.TRANSFER
description: Type of transfer requiring approval
votes:
type: array
items:
$ref: '#/components/schemas/ApprovalVote'
description: Array of votes cast on this approval
GetTransferApprovalResponse:
type: object
properties:
success:
type: boolean
example: true
description: Whether the operation was successful
message:
type: string
example: Approval details retrieved successfully
description: Human-readable message about the operation
approval:
$ref: '#/components/schemas/TransferApprovalDetail'
RejectTransferResponse:
type: object
properties:
success:
type: boolean
example: true
description: Whether the operation was successful
message:
type: string
example: Transfer rejected successfully
description: Human-readable message about the operation
approvalId:
type: string
format: uuid
description: ID of the approval being processed
example: approval-123-e89b-12d3-a456-426614174002
status:
type: string
enum:
- REJECTED
example: REJECTED
description: Current status after rejection
reason:
type: string
description: Reason for rejection
example: Transfer amount exceeds daily limit
timestamp:
type: string
format: date-time
description: When the rejection was processed
example: '2024-01-15T11:00:00.000Z'
ApproveTransferRequest:
type: object
description: Request body for approving a transfer
properties:
comment:
type: string
maxLength: 1000
description: Optional comment explaining the approval decision
example: Approved after reviewing transaction details
GetTransferApprovalsResponse:
type: object
properties:
success:
type: boolean
example: true
description: Whether the operation was successful
message:
type: string
example: Pending approvals retrieved successfully
description: Human-readable message about the operation
count:
type: integer
description: Total number of pending approvals
example: 2
approvals:
type: array
items:
$ref: '#/components/schemas/TransferApprovalSummary'
description: Array of pending approval records
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT