API Overview

Everything you need to integrate with our gamification platform

ProEnhance API

User-facing gamification API for signup, login, challenges, rewards tracking, and user engagement. Perfect for mobile apps and customer portals.

User Management Challenges Rewards

ProControl API

Administrative API for program design and management. Create campaigns, configure behaviors, manage organizations, and control the entire loyalty ecosystem.

Admin Panel Campaigns Organizations

Authentication

Secure authentication required for all API endpoints

ProEnhance API

Valid API Keys are generated on an Organisation level for authentication:

x-api-key: YOUR_ORG_API_KEY

ProControl API

Administrative Bearer token authentication for all endpoints:

Authorization: Bearer ADMIN_JWT_TOKEN

Base URL:

https://control.proeliumintelligence.com

ProEnhance API

User-facing gamification and loyalty platform endpoints

Base URL: https://api.proeliumintelligence.com/enhance Version: 1.0

User Management

POST /v1/User/SignUp Authenticated

Register a new user account

Request Body
{
  "username": "string",
  "email": "string",
  "password": "string",
  "firstName": "string",
  "lastName": "string"
}
Response
{
  "id": "string",
  "username": "string",
  "email": "string",
  "emailVerified": false,
  "createdAt": "2023-01-01T00:00:00Z"
}
POST /v1/User/Login Authenticated

Authenticate user and receive JWT token

Request Body
{
  "email": "string",
  "password": "string"
}
Response
{
  "token": "string",
  "user": {
    "id": "string",
    "username": "string",
    "email": "string"
  },
  "expiresAt": "2023-01-01T00:00:00Z"
}
GET /v1/User/VerifyEmail/{token} Authenticated

Verify user email address with token

Email verification endpoint - no additional parameters required. The token is provided in the URL path.

PUT /v1/User/{id} Authenticated

Update user profile information

Update user profile endpoint. Requires authentication. Request body should contain user profile fields to update.

GET /v1/User/Challenges/{userId} Authenticated

Get user's challenges and progress

Get all challenges for a specific user, including their progress and completion status.

Organisation

POST /v1/Organisation/Authenticate API Key

Authenticate organisation with API key

Authenticate an organisation using their API key. Include the X-API-Key header in your request.

Rewards

GET /v1/Reward/{id} Authenticated

Get reward details by ID

Retrieve detailed information about a specific reward including points value, availability, and redemption details.

Events

POST /api/Event Authenticated

Process a new event

Submit a new event for processing. The event will be evaluated against configured behaviors and may trigger rewards or challenge progress updates.

ProControl API

Administrative API for designing loyalty and incentive programs

Base URL: https://control.proeliumintelligence.com Version: 1

Back Office Users

POST /api/BackOfficeUsers/create Authenticated

Create a new back office user

Request Body
{
  "firstName": "John",
  "lastName": "Doe",
  "name": "John Doe",
  "email": "john@example.com",
  "userName": "johndoe",
  "phoneNumber": "+1234567890",
  "emailConfirmed": true,
  "lockoutEnabled": false,
  "twoFactorEnabled": false
}
Response
{
  "success": true,
  "message": "User created successfully"
}
GET /api/BackOfficeUsers Authenticated

Get all back office users with pagination

Query Parameters
skip (integer, default: 0)

Number of records to skip

limit (integer, default: 50)

Maximum records to return

Response
[
  {
    "id": "string",
    "firstName": "string",
    "lastName": "string",
    "email": "string",
    "userName": "string"
  }
]
GET /api/BackOfficeUsers/{id} Authenticated

Get back office user by ID

Retrieve detailed information about a specific back office user by their ID.

PUT /api/BackOfficeUsers/{id} Authenticated

Update back office user

Update an existing back office user's information. Provide the user ID in the URL and updated user data in the request body.

DELETE /api/BackOfficeUsers/{id} Authenticated

Delete back office user

Permanently delete a back office user account. This action cannot be undone. Provide the user ID in the URL.

Users

POST /api/Users/create Authenticated

Create a new user with external ID

Request Body
{
  "externalUserId": "external_123",
  "associatedOrganisations": [
    "org_id_1",
    "org_id_2"
  ],
  "optIn": true,
  "activity": {
    "points": 100,
    "challengesInProgress": 2
  }
}
Response
{
  "id": "string",
  "externalUserId": "string",
  "optIn": true,
  "createdAt": "2023-01-01T00:00:00Z"
}
GET /api/Users Authenticated

Get users with filtering and pagination

Query Parameters
organisationId (string, optional)

Filter by organisation

optIn (boolean, optional)

Filter by opt-in status

Response
[
  {
    "id": "string",
    "externalUserId": "string",
    "optIn": true,
    "associatedOrganisations": ["org1"]
  }
]

Organisations

POST /api/Organisations/create Authenticated

Create a new organisation

Request Body
{
  "name": "Company Ltd",
  "description": "A sample company",
  "type": "Enterprise",
  "industry": "Technology",
  "email": "info@company.com",
  "website": "https://company.com",
  "isActive": true
}
Response
{
  "id": "string",
  "name": "string",
  "isActive": true,
  "createdAt": "2023-01-01T00:00:00Z"
}
GET /api/Organisations/{id} Authenticated

Get organisation by ID

Retrieve detailed information about a specific organisation including name, description, contact details, and associated features.

Rewards

GET /api/Rewards Authenticated

Get rewards with filtering and pagination

Query Parameters
organisationId (string, optional)

Filter by organisation

isLive (boolean, optional)

Filter by live status

isActive (boolean, optional)

Filter by active status

Response
[
  {
    "id": "string",
    "name": "string",
    "pointsValue": 100,
    "monetaryValue": 10.00,
    "isActive": true,
    "category": "gift_card"
  }
]
POST /api/Rewards Authenticated

Create a new reward

Request Body
{
  "name": "$10 Gift Card",
  "description": "Amazon gift card",
  "organisationId": "org123",
  "pointsValue": 1000,
  "monetaryValue": 10.00,
  "availableStock": 100,
  "isActive": true,
  "category": "gift_card"
}
Response
{
  "id": "string",
  "name": "string",
  "pointsValue": 1000,
  "createdAt": "2023-01-01T00:00:00Z"
}
GET /api/Rewards/{id} Authenticated

Get reward by ID

Retrieve detailed information about a specific reward including points value, description, availability, and redemption details.

PUT /api/Rewards/{id} Authenticated

Update reward

Update an existing reward's details including name, description, points value, or availability status.

DELETE /api/Rewards/{id} Authenticated

Delete reward

Permanently remove a reward from the system. This action cannot be undone and will affect any associated challenges or campaigns.

Challenges

POST /api/Challenges/create Authenticated

Create a new challenge

Request Body
{
  "name": "Daily Steps Challenge",
  "description": "Walk 10,000 steps daily",
  "organisationId": "org123",
  "targetValue": 10000,
  "targetUnit": "steps",
  "pointsReward": 100,
  "startDate": "2023-01-01T00:00:00Z",
  "endDate": "2023-12-31T23:59:59Z",
  "isActive": true
}
Response
{
  "id": "string",
  "name": "string",
  "isActive": true,
  "createdAt": "2023-01-01T00:00:00Z"
}
GET /api/Challenges Authenticated

Get challenges with filtering

Query Parameters
organisationId (string, optional)

Filter by organisation

isActive (boolean, optional)

Filter by active status

Response
[
  {
    "id": "string",
    "name": "string",
    "targetValue": 10000,
    "pointsReward": 100,
    "isActive": true
  }
]

Event Evaluation

POST /api/EventEvaluation/evaluate Authenticated

Evaluate and process an event

Request Body
{
  "eventType": "user_action",
  "userId": "user123",
  "organisationId": "org123",
  "eventDateTime": "2023-01-01T00:00:00Z",
  "eventData": {
    "action": "login",
    "points": 10
  },
  "metadata": {
    "source": "mobile_app"
  }
}
Response
{
  "processed": true,
  "message": "Event processed successfully",
  "pointsAwarded": 10,
  "challengesUpdated": 1
}
GET /api/EventEvaluation/test-fleet-example Public

Get fleet management test example

Get a sample fleet management event for testing purposes. Shows the expected structure for fleet-related events.

GET /api/EventEvaluation/test-transport-example Public

Get transport management test example

Get a sample transport management event for testing purposes. Shows the expected structure for transport-related events.

Badges

GET /api/Badges Authenticated

Get badges with filtering and pagination

Query Parameters
organisationId (string, optional)

Filter by organisation

isLive (boolean, optional)

Filter by live status

status (string, optional)

Filter by status

Response
[
  {
    "id": "string",
    "name": "string",
    "description": "string",
    "logoType": "string",
    "isLive": true,
    "status": "active"
  }
]
POST /api/Badges Authenticated

Create a new badge

Request Body
{
  "name": "Achievement Badge",
  "description": "Awarded for completing challenges",
  "logoType": "trophy",
  "organisationId": "org123",
  "isLive": true,
  "status": "active"
}
Response
{
  "id": "string",
  "name": "string",
  "isLive": true,
  "createdAt": "2023-01-01T00:00:00Z"
}

Behaviours

GET /api/Behaviours Authenticated

Get behaviours with filtering options

Query Parameters
organisationId (string, optional)

Filter by organisation

isLive (boolean, optional)

Filter by live status

Response
[
  {
    "id": "string",
    "name": "string",
    "eventType": "string",
    "isLive": true,
    "status": "active"
  }
]
POST /api/Behaviours Authenticated

Create a new behaviour

Request Body
{
  "name": "Login Behavior",
  "eventType": "user_login",
  "organisationId": "org123",
  "conditions": [
    {
      "field": "loginCount",
      "operator": "greater_than",
      "value": "5",
      "dataType": "integer"
    }
  ],
  "isLive": true
}
Response
{
  "id": "string",
  "name": "string",
  "eventType": "string",
  "createdAt": "2023-01-01T00:00:00Z"
}

Campaigns

GET /api/Campaigns Authenticated

Get campaigns with filtering options

Query Parameters
organisationId (string, optional)

Filter by organisation

isActive (boolean, optional)

Filter by active status

Response
[
  {
    "id": "string",
    "name": "string",
    "text": "string",
    "validFrom": "2023-01-01T00:00:00Z",
    "validTo": "2023-12-31T23:59:59Z",
    "hashtags": ["promo", "loyalty"]
  }
]
POST /api/Campaigns Authenticated

Create a new campaign

Request Body
{
  "name": "Summer Promotion",
  "text": "Get 20% off this summer!",
  "image": "https://example.com/image.jpg",
  "hashtags": ["summer", "discount"],
  "validFrom": "2023-06-01T00:00:00Z",
  "validTo": "2023-08-31T23:59:59Z",
  "organisationId": "org123",
  "link": "https://example.com/promo"
}
Response
{
  "id": "string",
  "name": "string",
  "validFrom": "2023-06-01T00:00:00Z",
  "createdAt": "2023-01-01T00:00:00Z"
}

Surveys

GET /api/Surveys Authenticated

Get surveys with filtering options

Query Parameters
organisationId (string, optional)

Filter by organisation

isActive (boolean, optional)

Filter by active status

Response
[
  {
    "id": "string",
    "name": "string",
    "validFrom": "2023-01-01T00:00:00Z",
    "validTo": "2023-12-31T23:59:59Z",
    "questions": [
      {
        "text": "How satisfied are you?",
        "responseType": "rating"
      }
    ]
  }
]
POST /api/Surveys Authenticated

Create a new survey

Request Body
{
  "name": "Customer Satisfaction",
  "organisationId": "org123",
  "validFrom": "2023-01-01T00:00:00Z",
  "validTo": "2023-12-31T23:59:59Z",
  "questions": [
    {
      "text": "Rate our service",
      "responseType": "rating"
    },
    {
      "text": "Any feedback?",
      "responseType": "text"
    }
  ]
}
Response
{
  "id": "string",
  "name": "string",
  "validFrom": "2023-01-01T00:00:00Z",
  "createdAt": "2023-01-01T00:00:00Z"
}

Promotions

POST /api/Promotions/create Authenticated

Create a new promotion

Request Body
{
  "name": "Summer Sale",
  "code": "SUMMER20",
  "organisationId": "org123",
  "discount": 20.0,
  "description": "20% off summer items",
  "validFrom": "2023-06-01T00:00:00Z",
  "validTo": "2023-08-31T23:59:59Z",
  "usageLimit": 1000,
  "isPercentage": true,
  "isActive": true
}
Response
{
  "id": "string",
  "name": "string",
  "code": "string",
  "discount": 20.0,
  "createdAt": "2023-01-01T00:00:00Z"
}
GET /api/Promotions/{id} Authenticated

Get promotion by ID

Retrieve detailed information about a specific promotion including discount amount, validity dates, usage limits, and associated terms.

Data Schemas

Data models and structures for both API platforms

ProEnhance API Schemas

User

{
  "id": "string",
  "username": "string",
  "email": "string",
  "firstName": "string",
  "lastName": "string",
  "emailVerified": "boolean",
  "createdAt": "string",
  "updatedAt": "string"
}

UserChallenge

{
  "id": "string",
  "userId": "string",
  "title": "string",
  "description": "string",
  "progress": "number",
  "completed": "boolean",
  "reward": {
    "id": "string",
    "name": "string",
    "points": "number"
  }
}

Reward

{
  "id": "string",
  "name": "string",
  "description": "string",
  "points": "number",
  "type": "string",
  "available": "boolean",
  "createdAt": "string"
}

Event

{
  "id": "string",
  "userId": "string",
  "eventType": "string",
  "data": "object",
  "timestamp": "string",
  "processed": "boolean"
}

ProControl API Schemas

UserRequest

{
  "externalUserId": "string",
  "associatedOrganisations": ["string"],
  "optIn": "boolean",
  "optInDate": "string (date-time)",
  "optOutDate": "string (date-time)",
  "activity": {
    "challengesInProgress": "integer",
    "challengesExpired": "integer",
    "socialShares": "integer",
    "rewardsClaimed": "integer",
    "rewardsRedeemed": "integer",
    "points": "integer"
  }
}

BackOfficeUserRequest

{
  "firstName": "string",
  "lastName": "string",
  "name": "string",
  "email": "string (email)",
  "userName": "string",
  "phoneNumber": "string",
  "emailConfirmed": "boolean",
  "lockoutEnabled": "boolean",
  "twoFactorEnabled": "boolean",
  "about": "string",
  "address": "string",
  "jobTitle": "string",
  "roles": ["string"],
  "associatedOrganisations": ["string"]
}

ChallengeRequest

{
  "name": "string",
  "description": "string",
  "organisationId": "string",
  "instructions": "string",
  "associatedBehaviourId": "string",
  "associatedRewardId": "string",
  "logoUrl": "string (uri)",
  "targetValue": "integer",
  "targetUnit": "string",
  "startDate": "string (date-time)",
  "endDate": "string (date-time)",
  "pointsReward": "integer",
  "maxParticipants": "integer",
  "isActive": "boolean",
  "isRecurring": "boolean",
  "recurrencePattern": "string",
  "difficultyLevel": "string",
  "category": "string",
  "tags": ["string"],
  "requiresApproval": "boolean",
  "priority": "integer (0-5)"
}

RewardRequest

{
  "name": "string",
  "description": "string",
  "organisationId": "string",
  "code": "string",
  "codeList": ["string"],
  "pointsValue": "integer",
  "monetaryValue": "number",
  "availableStock": "integer",
  "ttlTimeFrame": "string",
  "ttlTimeFrameNumber": "integer",
  "termsAndConditionsLink": "string (uri)",
  "agreedLogoImage": "string (uri)",
  "agreedProductImage": "string (uri)",
  "redeemGuidance": "string",
  "isActive": "boolean",
  "requiresApproval": "boolean",
  "category": "string",
  "expiryDate": "string (date-time)"
}

EventRequest

{
  "eventType": "string",
  "userId": "string",
  "organisationId": "string",
  "eventDateTime": "string (date-time)",
  "eventData": {
    "additionalProperties": {}
  },
  "metadata": {
    "additionalProperties": "string"
  }
}

OrganisationRequest

{
  "name": "string",
  "childCompanies": ["string"],
  "description": "string",
  "type": "string",
  "logoUrl": "string (uri)",
  "features": ["string"],
  "industry": "string",
  "phone": "string",
  "email": "string (email)",
  "address": "string",
  "website": "string (uri)",
  "isActive": "boolean"
}

BadgeRequest

{
  "name": "string",
  "description": "string",
  "logoType": "string",
  "organisationId": "string",
  "isLive": "boolean",
  "status": "string"
}

BehaviourRequest

{
  "name": "string",
  "eventType": "string",
  "organisationId": "string",
  "conditions": [
    {
      "field": "string",
      "operator": "string",
      "value": "string",
      "dataType": "string"
    }
  ],
  "isLive": "boolean",
  "status": "string",
  "duration": {
    "type": "string",
    "withinSpecificTimeframeNumber": "integer",
    "withinSpecificTimeframe": "string",
    "forSpecificTimeframeNumber": "integer",
    "forSpecificTimeframe": "string",
    "dateFrom": "string (date-time)",
    "dateTo": "string (date-time)"
  }
}

CampaignRequest

{
  "name": "string",
  "text": "string",
  "image": "string (uri)",
  "hashtags": ["string"],
  "validFrom": "string (date-time)",
  "validTo": "string (date-time)",
  "organisationId": "string",
  "link": "string (uri)"
}

SurveyRequest

{
  "name": "string",
  "organisationId": "string",
  "validFrom": "string (date-time)",
  "validTo": "string (date-time)",
  "questions": [
    {
      "text": "string",
      "responseType": "string"
    }
  ]
}

PromotionRequest

{
  "name": "string",
  "code": "string",
  "organisationId": "string",
  "discount": "number (0-100)",
  "description": "string",
  "validFrom": "string (date-time)",
  "validTo": "string (date-time)",
  "usageLimit": "integer",
  "timesUsed": "integer",
  "minimumOrderValue": "number",
  "maximumDiscountAmount": "number",
  "isPercentage": "boolean",
  "isActive": "boolean",
  "requiresAuthentication": "boolean",
  "productType": "string",
  "productTypes": ["string"],
  "allowedCompanies": ["string"],
  "excludedProducts": ["string"],
  "associatedChallenge": "string",
  "category": "string"
}