ERPMedium setup

SAP + NeutronEDI

Add EDI translation and validation to your SAP workflows with a simple REST API.

SAP installations rarely speak EDI directly. Most teams put a thin middleware layer in front of SAP — a Python or Node service, an iFlow on Cloud Integration, or a custom ABAP wrapper — that calls NeutronEDI to translate documents and then posts the resulting JSON into SAP via IDoc, BAPI, or OData.

How SAP + NeutronEDI works

Inbound: trading-partner EDI flows into SAP. Outbound: SAP data flows back out as compliant EDI.

Inbound — partner → SAP

1

Trading partner sends EDI

The trading partner sends an X12 or EDIFACT document via SFTP, AS2, or a direct API call into your environment.

2

NeutronEDI translates

Your service POSTs the raw EDI to /api/v1/read/x12 (or /read/edifact). NeutronEDI returns clean JSON in milliseconds.

3

JSON flows into SAP

The JSON lands in SAP — mapped to native objects, imported via middleware, or consumed directly by your code (SAP (IDoc, BAPI, OData, or Cloud Integration)).

Outbound — SAP → partner

1

SAP produces data

A shipment confirmation, invoice, or PO acknowledgment occurs inside SAP. Your service picks it up via webhook, polling, or scheduled query.

2

NeutronEDI generates EDI

POST a JSON payload describing the document to /api/v1/write/x12 (or /write/edifact). NeutronEDI returns standards-compliant EDI.

3

Send to partner

Drop the resulting EDI document onto the partner's SFTP, AS2, or VAN — the same channel that delivered the inbound document.

Common EDI transactions for SAP

These are the transaction sets you'll see most often in SAP integrations. The Read API parses every set NeutronEDI supports — this is just where teams typically start.

CodeNameDescription
850Purchase OrderRetailer sends purchase order to supplier
855Purchase Order AcknowledgmentSupplier confirms receipt and acceptance of PO
856Advance Ship NoticeSupplier notifies retailer of shipment details
810InvoiceSupplier sends invoice for delivered goods
997Functional AcknowledgmentTechnical receipt confirmation for any EDI document
ORDERSEDIFACT Purchase OrderInternational purchase order (EDIFACT equivalent of 850)
INVOICEDIFACT InvoiceInternational invoice (EDIFACT equivalent of 810)
DESADVEDIFACT Despatch AdviceInternational shipment notice (EDIFACT equivalent of 856)

How SAP teams use NeutronEDI

Automate purchase order ingestion from trading partners into SAP

Receive 850s on an SFTP drop, route them through a Python or Node listener, and translate to JSON via the Read API before invoking SALES_ORDER_CREATE_FROM_DAT2 or an OData SalesOrderSet POST.

Generate ASN (856) documents from SAP shipment data

Trigger on a delivery PGI in SAP, build the ASN payload from VBFA / LIPS, and POST to /api/v1/write/x12 with type 856. Drop the resulting X12 onto the partner's SFTP or AS2 endpoint.

Validate inbound EDI before posting to SAP

Call /api/v1/validate/x12 first to surface structural errors against the X12 standard — bad envelope, missing required segments, malformed transaction sets. Only documents that parse cleanly get queued for SAP posting; the rest go to a review queue with a structured error report.

Bridge EDIFACT partners with SAP installations in international operations

European partners on ORDERS / DESADV / INVOIC translate cleanly through /api/v1/read/edifact, returning the same JSON shape your X12 pipeline already understands. One SAP integration handles both standards.

Example integration

A Python middleware service receives a raw X12 850 from a trading partner over SFTP, posts it to the Read API, and hands the JSON to SAP via an OData service for ORDERS_CREATE.

sap_inbound_po.py
import os
import requests

NEUTRON_API_KEY = os.environ["NEUTRON_API_KEY"]
SAP_ODATA_URL = os.environ["SAP_ODATA_URL"]  # /sap/opu/odata/sap/SALES_ORDER_SRV
SAP_AUTH = (os.environ["SAP_USER"], os.environ["SAP_PASS"])


def translate_edi(raw_edi: str) -> dict:
    response = requests.post(
        "https://api.neutronedi.com/api/v1/read/x12",
        headers={
            "X-API-Key": NEUTRON_API_KEY,
            "Content-Type": "application/edi-x12",
        },
        data=raw_edi,
        timeout=15,
    )
    response.raise_for_status()
    return response.json()


def post_to_sap(po: dict) -> None:
    requests.post(
        f"{SAP_ODATA_URL}/SalesOrderSet",
        json={
            "PurchaseOrderByCustomer": po["poNumber"],
            "CustomerPurchaseOrderDate": po["date"],
            "Items": [
                {"Material": item["sku"], "RequestedQuantity": item["qty"]}
                for item in po["items"]
            ],
        },
        auth=SAP_AUTH,
        timeout=20,
    ).raise_for_status()


def handle_inbound_850(raw_edi: str) -> None:
    parsed = translate_edi(raw_edi)
    for txn in parsed["transactions"]:
        if txn["type"] == "850":
            post_to_sap(txn)

What the API returns

Read API response
{
  "interchange": { "sender": "WALMART", "receiver": "ACMECORP", "control": "000000123" },
  "transactions": [
    {
      "type": "850",
      "name": "Purchase Order",
      "poNumber": "4500291837",
      "date": "2026-04-12",
      "buyerDuns": "0078903456",
      "items": [
        { "sku": "WIDGET-BLUE", "qty": 240, "unitPrice": "12.50" },
        { "sku": "WIDGET-RED",  "qty": 120, "unitPrice": "12.50" }
      ],
      "total": "4500.00"
    }
  ]
}

All code examples assume an API key issued from the Customer Portal. The free Developer tier includes 500 calls per month.

Getting started with SAP EDI

  1. 1

    Sign up for a free NeutronEDI Developer account

    Create an account in the NeutronEDI Customer Portal. The Developer tier includes 500 API calls per month at no cost.

    Open the portal
  2. 2

    Create an API key in the Customer Portal

    Generate an API key from the dashboard. The plaintext key is shown once at creation; copy it into your secret store.

    Read the docs
  3. 3

    Send your first EDI document to the Read endpoint

    POST a sample X12 or EDIFACT document to https://api.neutronedi.com/api/v1/read/x12 with the X-API-Key header. Confirm the JSON response shape matches what SAP expects on the receiving side.

    Read the docs
  4. 4

    Map the JSON response to your SAP data model

    Use the language and runtime that already integrates with SAP (SAP (IDoc, BAPI, OData, or Cloud Integration)). Map fields from the NeutronEDI JSON to SAP entities and persist them through the platform's standard create / update API.

Start Your SAP EDI Integration

500 API calls per month on the Developer plan. No credit card. No sales call. Read, write, and validate X12 and EDIFACT in minutes.