Quick Start Guide

eveXso Integration Guide

Follow this step-by-step guide to build your eveXso integration. Complete the steps in order for best results.

Step 1

check_circleGetting Connected

Obtain your API credentials and test your first connection to eveXso.

What You Need

  • checkAPI Key: Contact eveXso support or your account manager
  • checkSite ID: Your warehouse site identifier
  • checkUser ID: Integration user ID
  • checkEnvironment: Beta (testing) or Production

Choose Your Testing Environment

science

API Playground

Test APIs in your browser with live responses and ERP-specific code generation

Open Playgroundarrow_forward
integration_instructions

Postman Collection

Import pre-built requests into Postman with environment variables configured

View in Postmanarrow_forward

Test Your Connection

Call the warehouse/list endpoint to verify your credentials work:

POST https://api.evexso.com/wms_beta
Content-Type: application/json
x-api-key: YOUR_API_KEY

{
  "entity": "warehouse",
  "action": "list",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {}
}
Step 2

warehouseSetup Warehouses & Locations

Define your warehouse structure including storage groups, zones, and pick faces.

Location Hierarchy

eveXso supports a flexible 4-level location hierarchy. You can use all levels or just what you need:

Area

Top level (e.g., "WAREHOUSE", "YARD")

Zone

Zones within area (e.g., "A", "B", "COOL-ROOM")

Location

Specific locations (e.g., "A01", "B12")

Slot (Optional)

Pallet positions within a location

looks_oneDefine Warehouse

Create your warehouse record with address details.

POST /warehouse/check

looks_twoDefine Location Types

Set up your location hierarchy levels (required for locations).

POST /warehouse_location_type/check

looks_3Create Locations

Create your actual storage locations, pick faces, and packing areas.

POST /warehouse_location/check
Step 3

inventory_2Import Inventory

Import your product catalog with all tracking, packaging, and warehouse information.

warning

Important: Complete Inventory Setup

Each inventory item requires multiple API calls to be fully configured. Follow the order below:

  1. inventory - Core product information
  2. inventory_stocking_factor - At least ONE with pack_size = 1 (required)
  3. inventory_warehouse_information - Warehouse-specific settings
  4. inventory_dangerous_goods_information - DG/Hazmat data (if applicable)
  5. inventory_lookup - Barcodes and alternate codes

looks_oneCore Inventory Record

Create the main product record with description, category, and inventory type.

POST /inventory/check
View Example
{
  "inventory_code": "WIDGET-001",
  "display_code": "WIDGET-001",
  "description": "Premium Widget",
  "inventory_type": "STOCK",
  "unit_of_measure": "EA",
  "inventory_category": "WIDGETS"
}

looks_twoStocking Factors (Packaging)

⚠️ CRITICAL: You MUST create at least ONE stocking factor with pack_size = 1. This is the base unit.

Define how products are packaged (EA, BOX, PALLET, etc.). Create multiple stocking factors for different packaging levels.

POST /inventory_stocking_factor/check
View Example
{
  "items": [
    {
      "inventory_code": "WIDGET-001",
      "unit_of_measure": "EA",
      "pack_size": 1,
      "length": 10,
      "width": 10,
      "height": 5,
      "weight": 0.5,
      "is_default": true
    },
    {
      "inventory_code": "WIDGET-001",
      "unit_of_measure": "BOX",
      "pack_size": 12,
      "length": 50,
      "width": 40,
      "height": 30,
      "weight": 6.5,
      "is_default": false
    }
  ]
}

looks_3Warehouse Information

Set warehouse-specific settings like pick face location and average cost.

POST /inventory_warehouse_information/check

looks_4Dangerous Goods (Optional)

If your product is hazardous, include DG information for compliance.

POST /inventory_dangerous_goods_information/check

looks_5Barcodes & Lookups

Add GS1 barcodes (AI 01 for GTIN), part numbers (AI 240/241), and alternate lookup codes.

POST /inventory_lookup/check
View Example
{
  "items": [
    {
      "inventory_code": "WIDGET-001",
      "lookup_code": "9312345678901",
      "gs1_ai": "01",
      "description": "EAN Barcode"
    },
    {
      "inventory_code": "WIDGET-001",
      "lookup_code": "SUPP-WIDGET-01",
      "gs1_ai": "240",
      "description": "Supplier Part Number"
    }
  ]
}
Step 4

peopleImport Customers

Create customer records with delivery locations (supply locations).

Two API Calls Required

Customers require both a customer record (basic info) and one or more supply_location records (delivery addresses).

looks_oneCreate Customer Record

Create the main customer record with name and basic information.

POST /customer/check

looks_twoCreate Supply Locations (Delivery Addresses)

Add one or more delivery locations for each customer. Each branch/site gets its own supply location.

POST /supply_location/check
View Example
{
  "entity": "customer",
  "entity_key": "ACME",
  "supply_location_code": "ACME-SYDNEY",
  "supply_location_name": "Acme Corp - Sydney Branch",
  "address_1": "123 Business St",
  "address_2": "",
  "suburb": "Sydney",
  "state": "NSW",
  "postcode": "2000",
  "country": "AU",
  "contact_name": "John Smith",
  "contact_phone": "+61 2 9876 5432",
  "contact_email": "john@acme.com",
  "courier_id": "",
  "courier_service": "STARTRACK",
  "registration": ""
}
Step 5

local_shippingImport Suppliers

Create supplier records with their locations (for receiving goods).

Same Pattern as Customers

Suppliers work exactly like customers - you need both a supplier record and supply_location records.

looks_oneCreate Supplier Record

Create the main supplier record.

POST /supplier/check

looks_twoCreate Supply Locations

Add supplier locations where goods will be received from. Set entity = "supplier" and entity_key to the supplier_code.

POST /supply_location/check
Step 6

local_shippingSetup Courier Services

Configure courier services in the eveXso UI for dispatch and label printing.

info

Setup in eveXso UI

Courier and courier service configuration is done in the eveXso admin interface, not via API. Contact eveXso support or your account manager to configure:

  • arrow_rightCourier accounts (e.g., StarTrack, AusPost, FedEx)
  • arrow_rightService levels (e.g., Express, Standard)
  • arrow_rightConsignment note printing templates
  • arrow_rightAutomatic freight calculation rules

Why This Matters

Once couriers are configured, sales orders can automatically:

  • check_circleCalculate freight based on weight, dimensions, and destination
  • check_circlePrint consignment notes during packing
  • check_circleGenerate tracking numbers
  • check_circleSync shipment status back to your ERP
Step 7

shopping_cartImport Orders

Start importing sales orders and purchase orders for fulfillment and receiving.

shopping_cartSales Orders

Import customer orders for picking, packing, and dispatch.

POST /sales_order/import

Tip: Use /import action to create complete orders with all lines in a single call.

receiptPurchase Orders

Import supplier orders for receiving goods into the warehouse.

POST /purchase_order/import

Tip: Purchase orders enable receiving against expected quantities and supplier details.

Order Processing Flow

📦

Import

Send order via API

📋

Pick

Warehouse picks items

📦

Pack

Pack and print labels

🚚

Dispatch

Ship to customer

Step 8

syncPoll for Updates

Retrieve shipment, receipt, and adjustment updates to sync back to your ERP.

How Polling Works

eveXso queues updates for your ERP system. Poll the API regularly (e.g., every 60 seconds) to retrieve new updates, then mark them as complete.

boltReal-Time Alternative: Webhooks can be configured to trigger your integration in real-time when updates are available, eliminating the need for regular polling.

1. Poll

Call the update endpoint

2. Process

Update your ERP system

3. Mark Complete

Confirm processing or error

Three Types of Updates

📦 Outgoing Consignments

Sales order fulfillment (line level)

📥 Incoming Consignments

Purchase order receipts (line level)

🔄 Move Attempts

Inventory adjustments & transfers (line level)

looks_onePoll for Outgoing Shipments (Sales Orders)

Retrieve completed shipments with tracking numbers, packed items, and delivery details.

POST /erp_update/outgoing_consignment
View Example Request
{
  "entity": "erp_update",
  "action": "outgoing_consignment",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {}
}

looks_twoPoll for Incoming Receipts (Purchase Orders)

Retrieve completed receipts with received quantities, batch/serial numbers, and supplier details.

POST /erp_update/incoming_consignment
View Example Request
{
  "entity": "erp_update",
  "action": "incoming_consignment",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {}
}

looks_3Poll for Inventory Adjustments & Transfers

Retrieve inventory movements including write-offs, write-ons, and location transfers.

POST /erp_update/move_attempt
View Example Request
{
  "entity": "erp_update",
  "action": "move_attempt",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {}
}

looks_4Mark Updates as Complete

After successfully processing updates in your ERP, mark them as complete so they're not returned again.

POST /erp_update/set_complete
View Example Request
{
  "entity": "erp_update",
  "action": "set_complete",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {
    "items": [
      {
        "integration_update_id": 12345
      },
      {
        "integration_update_id": 12346
      }
    ]
  }
}

looks_5Mark Updates as Error (Optional)

If processing fails in your ERP, mark the update as error with an error message. This prevents the update from being returned in normal polls after 5 failed attempts.

POST /erp_update/set_error
View Example Request
{
  "entity": "erp_update",
  "action": "set_error",
  "site_id": "YOUR_SITE_ID",
  "user_id": "YOUR_USER_ID",
  "platform": "integration",
  "session_id": "",
  "activity_id": "",
  "data": {
    "items": [
      {
        "integration_update_id": 12345,
        "error_message": "Customer not found in ERP"
      },
      {
        "integration_update_id": 12346,
        "error_message": "Inventory code missing from ERP"
      }
    ]
  }
}

Best Practices for Polling

  • check_circlePoll every 60 seconds - Balance between real-time updates and API load
  • check_circleAlways mark as complete - Prevents duplicate processing
  • check_circleHandle errors gracefully - If ERP update fails, don't mark as complete so you can retry
  • check_circleLog all transactions - Keep audit trail of all synced updates

You're Ready to Integrate!

You now have a complete overview of the integration process. Use the API Playground or Postman to start building.

Need help getting started?

Dave from eveXso