Skip to main content
Version: 1.0

Field Mapping

Field mapping lets your system talk to the platform in your own schema. Inbound payloads are translated into the internal format; outbound responses and error messages are translated back. Your code never has to know the platform's field names.

Mappings are configured per partner in the dashboard. You can start from a partner template or build one from scratch — see Configuring mappings.

This page describes what the mapping engine can do, so you can design a mapping that fits your payload.

Behavior at a glance

Your request (your field names)


Mapping engine ──► Internal format ──► Validation & persistence

Response (your field names) ◄────────── Reverse mapping

Validation errors use your field names too. If order_number is required but you mapped it from po_number, the error refers to po_number.

Mapping types

The engine supports four transformations. They compose — a single mapping can use all of them.

1. Simple rename

Map one top-level field to another.

In (you send)Out (internal)
po_numberorder_number
vendor_namecustomer_name
{"po_number": "PO-5001", "vendor_name": "Acme Corp"}

becomes

{"order_number": "PO-5001", "customer_name": "Acme Corp"}

2. Dot-notation (nested read / nested write)

Read from nested objects and/or write into nested objects. Either side can be a path.

In pathOut path
header.po_numberorder_number
header.vendor.namecustomer_name
header.vendorcustomer_info

3. Array index

Pull a value from a specific array position. Useful when header-level data is repeated on every line item.

In pathOut path
lines[0].order_reforder_number
lines[0].ship_tonotes

4. Array-to-array (nested mappings)

Transform an array of objects into another array with renamed keys — for order lines, inventory rows, and so on.

Source Details[]:

[
{"InventoryID": "RUG-5X7", "OrderQty": 10, "LineNote": "Fragile"},
{"InventoryID": "RUG-8X10", "OrderQty": 5}
]

Mapped to items[] with InventoryID → sku_code, OrderQty → quantity, LineNote → notes:

[
{"sku_code": "RUG-5X7", "quantity": 10, "notes": "Fragile"},
{"sku_code": "RUG-8X10", "quantity": 5}
]

The source path itself can be nested (purchase_order.lines), and inner field_map supports dot-notation too (product.item_code → sku_code).

Static values

Fields that are injected into every request after mapping. Useful for tagging, routing, or fixed metadata.

metadata.source = "acumatica"
metadata.integration = true

Every mapped payload will contain:

{"metadata": {"source": "acumatica", "integration": true}}

End-to-end example

Payload your ERP sends:

{
"OrderNbr": "SO-005123",
"Customer": {
"CustomerID": "CUST-100",
"CustomerName": "ABC Trading"
},
"ScheduledShipDate": "2026-05-01",
"Details": [
{"InventoryID": "RUG-5X7-BLU", "OrderQty": 10},
{"InventoryID": "RUG-8X10-RED", "OrderQty": 5}
]
}

Mapping (configured once, in the dashboard):

KindSourceTarget
RenameOrderNbrorder_number
Nested readCustomer.CustomerNamecustomer_name
Capture subtreeCustomercustomer_info
RenameScheduledShipDatedue_date
Array mappingDetails[] → items[]InventoryID→sku_code, OrderQty→quantity
Staticmetadata.source = "acumatica"

Resulting internal payload:

{
"order_number": "SO-005123",
"customer_name": "ABC Trading",
"customer_info": {"CustomerID": "CUST-100", "CustomerName": "ABC Trading"},
"due_date": "2026-05-01",
"items": [
{"sku_code": "RUG-5X7-BLU", "quantity": 10},
{"sku_code": "RUG-8X10-RED", "quantity": 5}
],
"metadata": {"source": "acumatica"}
}

Path syntax reference

SyntaxMeaningExample
fieldTop-level keypo_number
a.bNested objectheader.po_number
a.b.c.dDeep nestingpurchase.header.vendor.name
a[0].bArray elementlines[0].order_ref
a.b (target)Creates nested outmetadata.source

When no mapping is configured

If a partner has no active mapping for a resource, payloads pass through as-is and must use internal field names. Fine for quick tests; partner templates are the recommended path for production.

See also