FuzeMetrix IBA Integration - Public
Overview
The IBA validates members when they check in at wind tunnels using the FuzeMetrix (FM) booking system.
The integration performs the following 4 tasks:
- Member Validation: Exposes an endpoint where FM can validate an IBA member using a member's member_id and PIN code.
- Member Data: Exposes an endpoint where FM can retrieve member data for an individual member
- Tunnel Booking Data: Exposes an endpoint where FM can send the flight booking data for storage in the IBA system
- Logbook Management: Based on the status of the member the system will create a logbook entry for the member. It also allows members to easily update the flight time associated with a booking via an email link and web form
Business Logic
Business logic is mostly handled on the FM side apart from logbook entries associated with the booking.
Creating a Logbook Entry
Logbook entries are only created for members that have an active flyer_currency.
Email Triggers
When a booking is created through the FuzeMetrix integration, the system sends different emails based on the member's currency status:
-
Active Currency Status:
- Creates a logbook entry for the flight time
- Sends an "active" email template (
logbook/external-time-entry-active) - Email includes a link for the member to update their flight time
- The link contains a unique token that allows one-time access to modify the booking
-
Inactive Currency Status (Not current):
- Does NOT create a logbook entry (to prevent automatic recurrency)
- Sends an "inactive" email template (
logbook/external-time-entry-inactive) - Notifies the member that they need to complete recurrency before their time can be logged
Important Notes on Data Types
- Date Format:
- In payload all dates must be Unix timestamps in seconds
- In Responces all dates are in ISO format (2022-06-05T20:51:00.000Z)
- Token Generation: Must use HMAC SHA-256 with the exact JSON structure of the request body
Error Handling
HTTP Status Codes
- 200: Success - Request processed successfully
- 400: Bad Request - Missing client ID or token headers
- 403: Forbidden - Invalid HMAC token/unauthorized access
- 404: Not Found - Invalid client ID/client not found
- 422: Unprocessable Entity - Validation failed/missing required fields
- 500: Internal Server Error - Server-side error occurred
Error Response Format
{
"valid": false,
"message": "Error description"
}
Common Error Messages
- "Please provide client id for access the data"
- "Please provide token to access the resource"
- "Client id does not match with data"
- "Your token does not match"
- "Missing required fields: [field_list]"
- "Member not found"
- "Invalid PIN"
- "Invalid member ID"
- "Tunnel not found"
- "Booking already exits"
Success Messages
- "Member validated successfully"
- "Booking created successfully"
Authentication
HMAC SHA-256 Token Authentication
All API requests require HMAC authentication using SHA-256.
Required Headers:
client-id: Unique identifier for the FuzeMetrix clienttoken: HMAC SHA-256 hash of the request body using the client's secret key
Token Generation:
crypto.createHmac('SHA256', clientSecret).update(JSON.stringify(requestBody)).digest('hex')
API Endpoints
Base URL https://api.tunnelflight.com/api/external/fuse-metrix
1. PIN Validation
Validates member using their member_id and pin. Use this to check PIN before proceeding with booking creation.
Endpoint: POST /api/external/fuse-metrix/validate-pin (validation only)
Headers:
client-id: your-client-id
Authorization: generated-hmac-token
Content-Type: application/json
Request Body:
{
"member_id": 60649,
"member_pin": "67510"
}
Response (Success - 200):
{
"valid": true,
"message": "Member validated successfully"
}
Response (Error - 422):
{
"valid": false,
"message": "Invalid PIN" // or "Member not found"
}
Flow Diagram
View Flow Diagram
2. Member Data Endpoint
Retrieves member information for display or verification purposes.
Endpoint: POST /api/external/fuse-metrix/get-member
Request Body:
{
"member_id": 60649
}
Headers:
client-id: your-client-id
Authorization: any-valid-token
Note: client-id is lowercase with no hyphen for this legacy endpoint
Request Body: None (GET request)
Response (Success - 200):
{
"valid": true,
"member_id": 40,
"date_of_birth": "1979-06-08T15:28:42.000Z",
"screen_name": "Rusty Lewis",
"role_name": "Examiner",
"real_name": "Rusty Lewis",
"tunnel_name": "Support Center",
"is_coach": true,
"paymentStatus": "Not required",
"total_flight_time": "0:53",
"last_flight": "2025-04-08T07:40:00.000Z",
"currency_renewal_date_flyer": "2025-10-05T07:40:00.000Z",
"flyerLevels": {
"level1": "Yes",
"static": "Pro",
"dynamic": "Pro",
"formation": "Level 4"
},
"flyer_currency_status": "Active"
}
Response (Error - 422):
{
"valid": false,
"message": "Member not found"
}
Flow Diagram
View Flow Diagram
3. Create Booking Entry
Registers a new checkin / booking at the wind tunnel.
Endpoint: POST /api/external/fuse-metrix/create-booking
Path Parameters: None
Headers:
client-id: your-client-id
Authorization: generated-hmac-token
Content-Type: application/json
Request Body:
{
"member_id": 60649,
"purchase_id": 215312,
"purchase_date": 1744131450,
"flight_date": 1744098000,
"minutes_booked": 9,
"product_id": 12893,
"tunnel_id": 25, // uses FM tunnel ID
"checkin_time": 1744098000
}
Note: All dates are Unix timestamps in seconds.
Response (Success - 200):
{
"valid": true,
"message": "Booking created successfully"
}
Response (Error - 422):
{
"valid": false,
"message": "Member not found"
}
Flow Diagram
View Flow Diagram
Interactive Swagger UI
FuzeMetrix Integration API
Interactive documentation for the FuzeMetrix integration endpoints. Test the API directly in your browser:
This is the public version of the FuzeMetrix integration documentation. For internal IBA implementation details, see the internal documentation.