REST API
Integrate Tageur with your existing systems using our powerful REST API.
On this page:
1. Overview
The Tageur REST API enables seamless integration with your existing business systems. Build custom integrations, automate workflows, and synchronize data between Tageur and your ERP, CMMS, or inventory management systems.
Common Integration Scenarios:
- Sync assets from Microsoft Dynamics, SAP, or Odoo
- Create maintenance tasks from external work order systems
- Update parts inventory from procurement platforms
- Export asset data to business intelligence tools
- Automate asset lifecycle management
Base URL:
https://tageur.com/api
All API requests must use HTTPS. HTTP requests will be rejected.
2. Authentication
API authentication uses Bearer tokens. Generate an API key from your company settings page. Each API key is scoped to a specific company and has full access to that company's data.
Generating an API Key
- 1. Navigate to Company Settings → API Keys
- 2. Click "Create New API Key"
- 3. Enter a descriptive name (e.g., "Production ERP Integration")
- 4. Copy the generated key immediately (it won't be shown again)
- 5. Store it securely in your environment variables
Making Authenticated Requests
curl -X GET "https://tageur.com/api/assets" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
Security Best Practices:
- Never commit API keys to version control
- Use environment variables or secrets management services
- Rotate API keys regularly
- Create separate keys for different integrations
- Revoke unused or compromised keys immediately
3. Assets API
Manage physical assets including equipment, vehicles, tools, and infrastructure.
/api/assets
List all assets with optional filtering and pagination.
Query Parameters:
status
Filter by status (operational, maintenance, retired, etc.)
asset_type
Filter by type (Equipment, Vehicle, Tool, etc.)
q
Search by name, serial number, or model
page
Page number (default: 1)
per_page
Items per page (default: 50, max: 100)
Example Request:
curl -X GET "https://tageur.com/api/assets?status=operational&page=1&per_page=50" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response:
{
"success": true,
"data": {
"assets": [
{
"id": 123,
"name": "Excavator CAT 320",
"asset_type": "Heavy Equipment",
"status": "operational",
"brand": "Caterpillar",
"model_number": "320 GC",
"serial_number": "CAT320GC2024001",
"location": "Site A - Zone 3",
"created_at": "2024-11-20T10:30:00Z",
"updated_at": "2025-01-02T14:22:00Z"
}
],
"pagination": {
"current_page": 1,
"total_pages": 5,
"total_count": 247,
"per_page": 50
}
}
}
/api/assets/:id
Retrieve detailed information about a specific asset.
Example Response:
{
"success": true,
"data": {
"asset": {
"id": 123,
"name": "Excavator CAT 320",
"asset_type": "Heavy Equipment",
"status": "operational",
"serial_number": "CAT320GC2024001",
"brand": "Caterpillar",
"model_number": "320 GC",
"location": "Site A - Zone 3",
"company_office_location_id": 45,
"company_office_location": {
"id": 45,
"name": "Main Warehouse",
"city": "Chicago",
"state": "IL",
"is_primary": true
},
"latitude": 40.7128,
"longitude": -74.0060,
"purchase_date": "2024-11-15",
"purchase_price": "250000.00",
"warranty_duration_months": 36,
"warranty_expiry_date": "2027-11-15",
"maintenance_enabled": true,
"maintenance_interval_days": 180,
"maintenance_status": "current",
"last_maintenance_date": "2024-12-01",
"next_maintenance_date": "2025-05-30",
"extra_values": {
"department": "Construction",
"cost_center": "CC-450"
},
"company_id": 456
}
}
}
/api/assets
Create a new asset.
Required Fields:
name- Asset nameasset_type- Type categorystatus- Current status
Example Request:
curl -X POST "https://tageur.com/api/assets" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"asset": {
"name": "Forklift Toyota 8FG25",
"asset_type": "Material Handling",
"status": "operational",
"brand": "Toyota",
"model_number": "8FG25",
"serial_number": "TY8FG2025001",
"location": "Warehouse B",
"company_office_location_id": 45,
"purchase_date": "2025-01-03",
"purchase_price": "28500.00",
"extra_values": {
"max_capacity": "5000 lbs",
"fuel_type": "LPG"
}
}
}'
/api/assets/:id
Update an existing asset. Only include fields you want to change.
curl -X PATCH "https://tageur.com/api/assets/123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"asset": {
"status": "maintenance",
"location": "Maintenance Bay 2"
}
}'
/api/assets/sync
Bulk create or update assets. Matches by serial_number - creates new or updates existing.
curl -X POST "https://tageur.com/api/assets/sync" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{
"name": "Asset 1",
"serial_number": "SN001",
"asset_type": "Equipment",
"status": "operational"
},
{
"name": "Asset 2",
"serial_number": "SN002",
"asset_type": "Vehicle",
"status": "operational"
}
]
}'
Response:
{
"success": true,
"message": "Sync completed: 15 created, 8 updated, 2 failed",
"data": {
"created": [
{ "id": 789, "serial_number": "SN015" }
],
"updated": [
{ "id": 123, "serial_number": "SN002" }
],
"failed": [
{
"serial_number": "SN099",
"errors": ["Name can't be blank"]
}
]
}
}
4. Tasks API
Manage maintenance tasks, work orders, and scheduled activities.
/api/tasks
Query Parameters:
status
pending, assigned, in_progress, completed, etc.
priority
critical, urgent, high, normal, low
asset_id
Filter by specific asset
assigned_to_id
Filter by assigned user
due_before
Tasks due before date (ISO 8601)
q
Search title, description, notes
/api/tasks
curl -X POST "https://tageur.com/api/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"task": {
"title": "Monthly Hydraulic Fluid Check",
"description": "Inspect and top up hydraulic fluid levels",
"status": "pending",
"priority": "high",
"asset_id": 123,
"due_date": "2025-02-01",
"estimated_hours": 2
}
}'
Task Action Endpoints:
/api/tasks/:id/assign
Assign task to a user
/api/tasks/:id/start
Mark task as in progress
/api/tasks/:id/complete
Mark task as completed
/api/tasks/:id/comments
Add a comment to the task
5. Parts API
Manage spare parts inventory, suppliers, and usage tracking.
Available Endpoints:
/api/parts
List all parts
/api/parts/:id
Get part details
/api/parts
Create new part
/api/parts/:id
Update part
/api/parts/sync
Bulk sync parts
6. Mobile App APIs
Complete API endpoints for mobile and web applications. All endpoints use JWT authentication via /api/auth/login.
Authentication (JWT)
/api/auth/login
Login with email/password
/api/auth/register
Register new user
/api/auth/me
Get current user profile
/api/auth/refresh
Refresh JWT token
Teams
Manage teams for task assignment and collaboration.
/api/teams
List all teams
/api/teams/:id
Get team with members
/api/teams
Create team
Shipments
Growth+Create and manage shipments, assign assets, track delivery, and perform bulk claims. Available on Growth and Enterprise plans.
/api/shipments
List shipments (filter by ?status=)
/api/shipments/:id
Get shipment with assets
/api/shipments
Create shipment
/api/shipments/:id
Update shipment details
/api/shipments/:id
Delete shipment
/api/shipments/:id/add_asset
Add asset to shipment { asset_id }
/api/shipments/:id/remove_asset
Remove asset from shipment { asset_id }
/api/shipments/:id/mark_shipped
Mark as shipped { tracking_number, carrier }
/api/shipments/:id/mark_delivered
Mark as delivered
/api/shipments/:id/claim_all
Bulk claim all assets { claimer_type, claimer_company_id }
/api/shipments/:id/verify_unlock
Verify shipment password { unlock_code }
Company Members
View company members for task assignments.
/api/members
List all members (with search)
/api/members/:id
Get member details
Audit Trails
Track all changes to assets and tasks.
/api/assets/:id/audit_trail
Get asset history
/api/tasks/:id/audit_trail
Get task history
Document Signatures
Digital signatures for compliance documents.
/api/document_signatures
List pending signatures
/api/document_signatures/:id/sign
Sign document
7. ERP Sync Patterns
Tageur supports two complementary approaches for syncing data with external systems.
Bulk REST API Sync (Recommended for Initial Loads)
Best for batch operations, initial data migration, and periodic syncs.
Available Sync Endpoints:
/api/assets/sync
Bulk sync assets by serial_number
/api/parts/sync
Bulk sync parts by part_number
/api/tasks/sync
Bulk sync tasks by external_id
When to Use:
- Initial data migration from ERP systems
- Nightly or periodic batch syncs
- Manual sync operations
- Systems without webhook support
Event-Based Webhooks (Real-Time Updates)
Best for real-time, event-driven updates from external systems.
Webhook Endpoint:
/api/webhooks/receive
Supported Events:
asset.created,
asset.updated,
asset.deleted
part.created,
part.updated,
part.deleted
task.created,
task.updated,
task.completed
When to Use:
- Real-time sync from Dynamics 365, Odoo, SAP
- Event-driven ERP integrations
- Automated workflows triggered by external changes
8. Error Handling
The API uses standard HTTP response codes and returns detailed error messages in JSON format.
HTTP Status Codes:
200
Success
201
Resource created
400
Bad request - invalid parameters
401
Unauthorized - invalid or missing API key
404
Not found - resource doesn't exist
422
Validation failed
429
Rate limit exceeded
500
Server error
Error Response Format:
{
"success": false,
"error": "Validation Failed",
"errors": [
"Name can't be blank",
"Serial number has already been taken"
]
}
9. Rate Limiting
API requests are rate-limited to ensure platform stability and fair usage.
Rate Limits:
- Standard: 100 requests per minute
- Burst: 200 requests per 5 minutes
Rate Limit Headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1735987200
Monitor these headers to avoid hitting rate limits.
10. Complete API Schemas
Detailed field descriptions for all API resources.
Asset Schema
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | - | Unique identifier (read-only) |
name |
string | ✓ | Asset name |
asset_type |
string | ✓ | Type category (Equipment, Vehicle, Tool, etc.) |
status |
string | ✓ | Current status (operational, maintenance, retired, etc.) |
serial_number |
string | Unique serial number or identifier | |
brand |
string | Manufacturer brand | |
model_number |
string | Model or part number | |
location |
string | Specific location (e.g., room, shelf, zone) | |
company_office_location_id |
integer | ID of assigned office location | |
company_office_location |
object | - | Nested office location details (read-only) |
purchase_date |
date | Date of purchase (YYYY-MM-DD) | |
purchase_price |
decimal | Purchase cost | |
warranty_duration_months |
integer | Warranty period in months | |
warranty_expiry_date |
date | - | Calculated warranty end date (read-only) |
maintenance_enabled |
boolean | Enable scheduled maintenance | |
maintenance_interval_days |
integer | Days between maintenance cycles | |
extra_values |
object | Custom fields (JSON object with any structure) | |
company_id |
integer | - | Owner company ID (read-only) |
created_at |
datetime | - | Creation timestamp (read-only) |
updated_at |
datetime | - | Last update timestamp (read-only) |
Office Location Schema
| Field | Type | Required | Description |
|---|---|---|---|
id |
integer | - | Unique identifier (read-only) |
name |
string | ✓ | Location name |
address |
string | Street address | |
city |
string | City name | |
state |
string | State or province | |
country |
string | Country name | |
postal_code |
string | Postal or ZIP code | |
phone |
string | Contact phone number | |
email |
string | Contact email address | |
is_primary |
boolean | Primary location flag | |
is_active |
boolean | Active status | |
notes |
text | Additional notes or instructions |
11. Integration Examples
Sync Assets from ERP System
import requests
import os
TAGEUR_API_KEY = os.environ['TAGEUR_API_KEY']
BASE_URL = 'https://tageur.com/api'
headers = {
'Authorization': f'Bearer {TAGEUR_API_KEY}',
'Content-Type': 'application/json'
}
# Fetch assets from your ERP
erp_assets = get_assets_from_erp()
# Prepare bulk sync payload
sync_payload = {
'assets': [
{
'name': asset['name'],
'serial_number': asset['serial'],
'asset_type': asset['category'],
'status': 'operational',
'purchase_date': asset['purchase_date'],
'location': asset['location']
}
for asset in erp_assets
]
}
# Sync to Tageur
response = requests.post(
f'{BASE_URL}/assets/sync',
headers=headers,
json=sync_payload
)
result = response.json()
print(f"Synced: {len(result['data']['created'])} created, {len(result['data']['updated'])} updated")
Create Maintenance Tasks from Work Orders
const axios = require('axios');
const tageurApi = axios.create({
baseURL: 'https://tageur.com/api',
headers: {
'Authorization': `Bearer ${process.env.TAGEUR_API_KEY}`,
'Content-Type': 'application/json'
}
});
// Convert work order to Tageur task
async function createMaintenanceTask(workOrder) {
const taskData = {
task: {
title: workOrder.description,
priority: mapPriority(workOrder.urgency),
status: 'pending',
asset_id: workOrder.equipment_id,
due_date: workOrder.scheduled_date,
estimated_hours: workOrder.estimated_duration,
description: workOrder.notes
}
};
try {
const response = await tageurApi.post('/tasks', taskData);
console.log('Task created:', response.data.data.task.id);
return response.data.data.task;
} catch (error) {
console.error('Error creating task:', error.response.data);
throw error;
}
}
Export Asset Data for Reporting
require 'httparty'
require 'csv'
class TageurExporter
API_KEY = ENV['TAGEUR_API_KEY']
BASE_URL = 'https://tageur.com/api'
def export_assets_to_csv(filename)
all_assets = fetch_all_assets
CSV.open(filename, 'wb') do |csv|
csv << ['ID', 'Name', 'Type', 'Status', 'Serial', 'Location', 'Last Maintenance']
all_assets.each do |asset|
csv << [
asset['id'],
asset['name'],
asset['asset_type'],
asset['status'],
asset['serial_number'],
asset['location'],
asset['last_maintenance_date']
]
end
end
puts "Exported #{all_assets.size} assets to #{filename}"
end
private
def fetch_all_assets
assets = []
page = 1
loop do
response = HTTParty.get(
"#{BASE_URL}/assets",
headers: { 'Authorization' => "Bearer #{API_KEY}" },
query: { page: page, per_page: 100 }
)
data = response.parsed_response['data']
assets.concat(data['assets'])
break if data['pagination']['current_page'] >= data['pagination']['total_pages']
page += 1
end
assets
end
end
# Usage
exporter = TageurExporter.new
exporter.export_assets_to_csv('assets_report.csv')