Introduction
Welcome to the FacePOS API reference. This documentation provides a detailed explanation of all resources accessible through the FacePOS API. Our API is designed around REST, uses predictable resource-oriented URLs, and standard HTTP verbs and status codes.
All API endpoints are relative to this base URL. Use HTTPS only.
Authentication
FacePOS uses JWT (JSON Web Tokens) for API authentication via AWS Cognito. Obtain an access token through the sign-in endpoint, then include it in subsequent requests using the Authorization header.
Authorization: Bearer {access_token}
Status Codes
| Code | Description |
|---|---|
| 200 | Success — request completed |
| 201 | Created — resource successfully created |
| 400 | Bad Request — invalid parameters or missing fields |
| 401 | Unauthorized — invalid or missing access token |
| 403 | Forbidden — insufficient permissions |
| 404 | Not Found — resource does not exist |
| 429 | Too Many Requests — rate limit exceeded |
| 500 | Internal Server Error |
Rate Limiting
To ensure service stability, the FacePOS API enforces rate limits on a per-IP basis. If you exceed the limit, you will receive an HTTP 429 Too Many Requests response.
| Endpoint Type | Limit |
|---|---|
| Authentication | 10 requests / minute |
| Standard API | 100 requests / 15 minutes |
| Public endpoints | 200 requests / 15 minutes |
Authentication
Phone-based authentication powered by AWS Cognito. All passwords must be encrypted before sending. Supports both password and OTP-based sign-in flows.
Register a new user with phone number and encrypted password. An OTP will be sent to verify the phone number.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Phone with country code, e.g. +353871234567 |
| password | string | Required | Encrypted password |
| market | string | Optional | Market code (default: IE) |
curl -X POST https://api3.facepos.ie/api/v1/auth/signup \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+353871234567",
"password": "(encrypted)",
"market": "IE"
}'
{
"success": true,
"data": {
"message": "User registered successfully",
"userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"timestamp": "2025-10-30T12:00:00.000Z"
}
Verify phone number with the OTP code sent during signup.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Phone number used during signup |
| code | string | Required | 6-digit OTP verification code |
curl -X POST https://api3.facepos.ie/api/v1/auth/verify-signup \
-H "Content-Type: application/json" \
-d '{"phone_number": "+353871234567", "code": "123456"}'
{
"success": true,
"message": "Phone number verified successfully"
}
Sign in with phone number and encrypted password. Returns JWT access and refresh tokens.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Registered phone number with country code |
| password | string | Required | Encrypted password |
curl -X POST https://api3.facepos.ie/api/v1/auth/signin \
-H "Content-Type: application/json" \
-d '{"phone_number": "+353871234567", "password": "(encrypted)"}'
{
"success": true,
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
"expiresIn": 3600,
"user": {
"uid": 1,
"phoneno": "+353871234567",
"name": "John Doe"
}
}
}
Initiate passwordless OTP sign-in. Sends a one-time code to the phone number.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Registered phone number |
curl -X POST https://api3.facepos.ie/api/v1/auth/signin-otp \
-H "Content-Type: application/json" \
-d '{"phone_number": "+353871234567"}'
{
"success": true,
"data": {
"session": "AYABeD...",
"message": "OTP sent successfully"
}
}
Complete OTP sign-in by verifying the code. Returns JWT tokens on success.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Phone number from OTP request |
| otp | string | Required | 6-digit OTP code |
| session | string | Required | Session string from signin-otp response |
{
"success": true,
"data": {
"accessToken": "eyJhbGciOi...",
"refreshToken": "eyJhbGciOi...",
"expiresIn": 3600
}
}
Resend OTP code for signup verification or password reset.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Phone number to resend OTP to |
| type | string | Optional | OTP type: "signup" or "forgot_password" |
Request a password reset. Sends an OTP to the registered phone number.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Registered phone number |
Reset password using the OTP received from forgot-password.
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Registered phone number |
| code | string | Required | OTP verification code |
| new_password | string | Required | New encrypted password |
Change password by providing the current and new passwords. Requires authentication.
| Parameter | Type | Required | Description |
|---|---|---|---|
| old_password | string | Required | Current encrypted password |
| new_password | string | Required | New encrypted password |
| access_token | string | Required | Valid Cognito access token |
Verify if a JWT access token is still valid and not expired.
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | Required | JWT access token to verify |
Obtain a new access token using a valid refresh token.
| Parameter | Type | Required | Description |
|---|---|---|---|
| refresh_token | string | Required | Refresh token from sign-in response |
Permanently delete a user account from Cognito and the database.
| Parameter | Type | Required | Description |
|---|---|---|---|
| access_token | string | Required | Valid Cognito access token |
Users & Profiles
Manage user profile information. All endpoints require JWT authentication.
Retrieve the authenticated user's profile information.
curl -X GET https://api3.facepos.ie/api/v1/profile \
-H "Authorization: Bearer {access_token}"
{
"success": true,
"data": {
"uid": 1,
"phoneno": "+353871234567",
"name": "John Doe",
"email": "john@example.com",
"profileImage": "https://...",
"market": "IE"
}
}
Update the authenticated user's profile. Supports partial updates — only send fields you want to change.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Display name |
| string | Optional | Email address | |
| address | string | Optional | Street address |
| city | string | Optional | City |
| postcode | string | Optional | Postal code |
| country | string | Optional | Country code |
Merchants
Manage merchant accounts and business profiles. All endpoints require JWT authentication.
Retrieve merchants associated with the authenticated user.
{
"success": true,
"data": [{
"uid": 1,
"businessname": "Coffee Shop",
"businesstypeid": 3,
"phoneno": "+353871234567",
"email": "shop@example.com",
"status": "active"
}]
}
Create a new merchant business profile.
| Parameter | Type | Required | Description |
|---|---|---|---|
| businessname | string | Required | Business name |
| businesstypeid | integer | Required | Business type ID |
| string | Optional | Business email | |
| address | string | Optional | Business address |
Update an existing merchant profile by ID.
Delete a merchant profile by ID.
Transactions
Query and manage payment transactions. Supports filtering, pagination, and multiple data formats.
Get transactions for the authenticated user with enriched data including merchant and customer details.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| status | string | Optional | Filter by status (e.g. "completed", "pending") |
| from_date | string | Optional | Start date (YYYY-MM-DD) |
| to_date | string | Optional | End date (YYYY-MM-DD) |
| page | integer | Optional | Page number (default: 1) |
| limit | integer | Optional | Results per page (default: 10) |
{
"success": true,
"data": [{
"uid": 123,
"amount": "25.50",
"currency": "EUR",
"status": "completed",
"merchantname": "Coffee Shop",
"sendername": "John Doe",
"created_at": "2025-10-30T12:00:00.000Z"
}],
"pagination": {
"page": 1,
"limit": 10,
"total": 56
}
}
Get transactions for a specific merchant. Supports filtering by transaction type.
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Optional | Filter: "qr", "link", "all" |
| status | string | Optional | Filter by transaction status |
Get historical transaction data for the authenticated user.
Get transaction count statistics. No authentication required.
{
"success": true,
"data": {
"total": 1250,
"completed": 1100,
"pending": 100,
"failed": 50
}
}
Get public transaction data with enriched details. No authentication required.
Get raw transaction data directly from the database. No authentication required.
Payments & Refunds
Manage payment details and process refunds for completed transactions.
Get customer payment details with optional filters for merchant, status, and date range.
| Parameter | Type | Required | Description |
|---|---|---|---|
| merchant_id | integer | Optional | Filter by merchant |
| status | string | Optional | Filter by payment status |
Delete a customer payment detail record.
Create a new refund request for a completed transaction.
| Parameter | Type | Required | Description |
|---|---|---|---|
| transaction_id | integer | Required | Original transaction ID |
| amount | number | Required | Refund amount |
| reason | string | Optional | Refund reason |
List all refunds for the authenticated user or merchant.
Get details of a specific refund by ID.
Update a refund status or details.
Banking
Manage payees and merchant bank accounts for payment processing.
Get the list of payees for the authenticated user.
Add a new payee. Supports both FacePOS users (by phone) and external payees (by IBAN).
| Parameter | Type | Required | Description |
|---|---|---|---|
| phoneno | string | Required* | FacePOS user phone (for FacePOS payee) |
| name | string | Required | Payee display name |
| iban | string | Required* | IBAN (for external payee) |
| bic | string | Optional | BIC/SWIFT code |
phoneno for FacePOS payees or iban for external payees. Not both.Get payees associated with a specific merchant.
List bank accounts linked to the authenticated merchant.
Add a new bank account to a merchant profile.
| Parameter | Type | Required | Description |
|---|---|---|---|
| account_name | string | Required | Account holder name |
| iban | string | Required | IBAN |
| bic | string | Required | BIC/SWIFT code |
| bank_name | string | Optional | Name of the bank |
| currency | string | Optional | Account currency (default: EUR) |
Update an existing merchant bank account.
Remove a bank account from a merchant profile.
App Management
Manage mobile app versions and generate receipt identifiers.
List app versions with optional filters for platform and version number.
| Parameter | Type | Required | Description |
|---|---|---|---|
| platform | string | Optional | Filter: "ios", "android" |
| latest | boolean | Optional | Get only latest version |
Register a new app version for update tracking.
| Parameter | Type | Required | Description |
|---|---|---|---|
| version | string | Required | Semantic version (e.g. "2.1.0") |
| platform | string | Required | "ios" or "android" |
| force_update | boolean | Optional | Whether update is mandatory |
| release_notes | string | Optional | Change log |
Generate unique receipt identifiers for transactions.
Calendar
Manage Google Calendar appointments for scheduling and booking.
List all appointments with optional date and status filters.
Create a new appointment in Google Calendar.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Required | Event title |
| start_time | string | Required | Start time (ISO 8601) |
| end_time | string | Required | End time (ISO 8601) |
| description | string | Optional | Event description |
| attendees | array | Optional | List of attendee emails |
Get a specific appointment by ID.
Update an existing appointment.
Delete an appointment.
System
System health monitoring and administrative data queries.
Check API server health, database connectivity, and service status.
{
"success": true,
"data": {
"timestamp": "2025-10-30T12:00:00.000Z",
"version": "1.0.0",
"environment": "production",
"uptime": 86400,
"database": {
"status": "healthy",
"responseTime": "15ms"
}
}
}
Query any database table with pagination and filters. Administrative endpoint.
| Parameter | Type | Required | Description |
|---|---|---|---|
| table | string | Required | Table name to query |
| page | integer | Optional | Page number |
| limit | integer | Optional | Results per page |
| filter | object | Optional | Key-value filter conditions |
FacePOS API Reference · Version 1.0 · © 2025 FacePOS
Base URL: https://api3.facepos.ie