Connect External Systems
Integrate your ERP, accounting, or custom systems with Tracktile
Connect Tracktile with your existing business systems to create a unified data flow across your organization.
Common Integrations
| System Type | Use Case | Approach |
|---|---|---|
| ERP | Sync products, orders, inventory | Webhooks + API |
| Accounting | Push invoices, sync customers | Webhooks |
| E-commerce | Import orders, update stock | Webhooks + API |
| WMS | Coordinate warehouse ops | Real-time API |
Integration Patterns
Pattern 1: Event-Driven Sync
Best for: Real-time data synchronization
┌───────────┐ Webhook ┌──────────────┐
│ Tracktile │ ─────────────→ │ Your System │
└───────────┘ └──────────────┘
// Your webhook handler
app.post("/webhooks/tracktile", async (req, res) => {
// Verify the webhook signature (see Webhook Security docs)
const event = verifyWebhook(req, process.env.WEBHOOK_SECRET);
// Acknowledge immediately
res.status(200).send("OK");
// Process asynchronously
switch (event.kind) {
case "order.status.changed":
await erp.createSalesOrder(mapToErpFormat(event));
break;
case "shipment.status.changed":
if (event.currentShipmentStatus === "in_transit") {
await erp.confirmShipment(event.shipmentId);
}
break;
}
});Pattern 2: Scheduled Batch Sync
Best for: Non-critical data, bulk updates
// Run every hour
cron.schedule("0 * * * *", async () => {
const limit = 100;
let offset = 0;
let hasNextPage = true;
while (hasNextPage) {
const response = await fetch(
`https://api.tracktile.io/products?offset=${offset}&limit=${limit}`,
{
headers: {
Authorization: "Bearer api-YOUR_TOKEN_HERE",
"X-Pagination-Format": "page",
},
}
);
const { results, pagination } = await response.json();
for (const product of results) {
await erp.upsertProduct(mapToErpFormat(product));
}
hasNextPage = pagination.hasNextPage;
offset += limit;
}
});Pattern 3: Two-Way Sync
Best for: Master data management
// Tracktile → ERP (via webhooks)
app.post("/webhooks/tracktile", handleTracktileEvent);
// ERP → Tracktile (via API)
app.post("/webhooks/erp", async (req, res) => {
const erpEvent = req.body;
if (erpEvent.type === "customer.updated") {
await fetch(
`https://api.tracktile.io/customers/${erpEvent.data.tracktileId}`,
{
method: "PUT",
headers: {
Authorization: "Bearer api-YOUR_TOKEN_HERE",
"Content-Type": "application/json",
},
body: JSON.stringify(mapFromErpFormat(erpEvent.data)),
}
);
}
res.status(200).send("OK");
});