> ## Documentation Index
> Fetch the complete documentation index at: https://docs.duvo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Infor Nexus

> Pull freight invoices with their charge lines from Infor Nexus — both the carrier's submitted invoice and the expected invoice Nexus rated itself.

Infor Nexus is a multi-enterprise supply chain network that sits between shippers and their carriers. Connecting it to Duvo lets your agents read freight invoices **with their individual charge lines**.

What makes Nexus different from a carrier connection: it holds **two** invoices per shipment.

|              | What it is                                                                     |
| ------------ | ------------------------------------------------------------------------------ |
| **Expected** | The invoice Nexus rated itself, from your transport plan and its rating engine |
| **Carrier**  | The invoice the carrier actually submitted                                     |

A variance is only meaningful **between** the two. Comparing one side against itself always nets to zero.

<Warning>
  **Check one thing before you start.** These invoices only exist if your Nexus tenancy licenses **Freight Pay & Audit**. Without it, the objects are never populated and the connection returns nothing — not an error, just empty results. Ask your Infor account team to confirm before setting this up.
</Warning>

## Setup

Setup needs two credentials, and one of them has to come from Infor rather than from your own administrator.

<Steps>
  <Step title="Confirm prerequisites" icon="circle-check">
    <Check>Your Nexus tenancy licenses **Freight Pay & Audit**, and freight invoices are actually flowing through it.</Check>
    <Check>An Infor Nexus administrator who can manage users and access keys.</Check>
    <Check>Your organization's Infor Nexus **data key** — a 40-character string. If you do not have one, your administrator can request a production data key from Infor.</Check>
  </Step>

  <Step title="Ask Infor Nexus to create an OAuth Client Agent user" icon="user-plus">
    Raise a request with Infor Nexus support for an **OAuth Client Agent user**.

    <Warning>
      Your own Trade Admins **cannot** create this user type — only Infor Nexus can, from the Network Hub. Trade Admins can view an existing one and manage its keys, but not create it. Raise this request first: it depends on Infor rather than on your own team, so it can take longer than every other step here.
    </Warning>

    Ask for the user to be scoped **read-only** for the freight invoice objects. Nexus sets create and edit rights per user in the User Profile's Security Detail, so this has to be specified rather than assumed.
  </Step>

  <Step title="Generate the access key pair" icon="key">
    Once the user exists, a Trade Admin can generate its keys. You need both halves:

    * **Access Key ID** — the client identifier
    * **Secret Access Key** — the secret

    <Warning>
      Nexus shows the secret **once**, when the key is generated, and there is no way to reveal or reset it afterwards. Copy it before leaving that screen. There is also a limit of two active keys per user, which matters when you come to rotate.
    </Warning>
  </Step>

  <Step title="Add the connection in Duvo" icon="plug">
    On the [Connections page](https://app.duvo.ai/integrations), choose **Infor Nexus** and enter:

    <ParamField body="Access Key ID" type="string" required>
      The Access Key ID from the OAuth Client Agent user.
    </ParamField>

    <ParamField body="Secret Access Key" type="string" required>
      The matching secret, shown once when the key was generated.
    </ParamField>

    <ParamField body="Data Key" type="string" required>
      Your organization's 40-character Infor Nexus data key.
    </ParamField>

    <ParamField body="Environment" type="string">
      Leave empty for production, or enter `training` for the Infor Nexus training environment.
    </ParamField>

    <Note>
      The **Data Key** is separate from the access key pair and is sent on every request. Nexus rejects calls without it before it even looks at the access keys — so if you see an authentication failure, check the data key first.
    </Note>
  </Step>
</Steps>

## Capabilities

<CardGroup cols={2}>
  <Card title="List invoices" icon="list">
    Read either side — carrier or expected — filtered by carrier SCAC or your own query expression, page by page. Paging has a limit worth knowing; see below.
  </Card>

  <Card title="Read one invoice in full" icon="file-invoice">
    Fetch a single invoice with its charge lines: charge code, charge type, amount and currency for each line.
  </Card>
</CardGroup>

## Key Benefits

* **Both sides of the bill in one place** — the carrier's invoice and the expected invoice Nexus rated itself, so a difference is readable without exporting anything or joining two systems by hand.
* **Charge-level detail, not just totals** — every charge line arrives with its own code, amount and currency, which is the level any rate dispute is actually argued at.
* **No portal exports to maintain** — your agents read the invoices directly, so nobody is downloading spreadsheets on a monthly rhythm to keep a spend review current.
* **Honest about what it found** — every invoice list states which filters it covered and whether charge lines were included, so a summary built on it cannot quietly overclaim.

## Works Well With

<CardGroup cols={3}>
  <Card title="Google Sheets" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/google-sheets.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=0ef8d55e05c34e7a4a618933bdf0ceb3" href="/user-guide/connections/available-connections/google-sheets" width="24" height="24" data-path="images/connections/google-sheets.svg">
    Write charge lines into a spreadsheet for review. Lining the two sides up against each other needs a shipment reference present on both invoices, and a full read of each — see the limits below.
  </Card>

  <Card title="Microsoft Excel" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/excel.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=986599d60d09acee47293fda2b62df99" href="/user-guide/connections/available-connections/microsoft-excel" width="2290" height="2130" data-path="images/connections/excel.svg">
    Build a recurring freight-spend workbook from the charge lines, read one invoice at a time, rather than from portal exports.
  </Card>

  <Card title="Slack" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/slack.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=8a64bdd1af39e903923e4a273b4a4618" href="/user-guide/connections/available-connections/slack" width="512" height="512" data-path="images/connections/slack.svg">
    Post what an agent found on the invoices it read — the charge codes and amounts — to the channel that handles carrier queries.
  </Card>

  <Card title="Microsoft Teams" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/teams.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=6402a90678b560d0b0a4fc3b02c0d3e0" href="/user-guide/connections/available-connections/microsoft-teams" width="2229" height="2073" data-path="images/connections/teams.svg">
    Raise the same findings in the channel where freight and finance already talk.
  </Card>

  <Card title="Gmail" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/gmail.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=ad4e229283f3fe2f26c0f96a49f28e13" href="/user-guide/connections/available-connections/gmail" width="88" height="66" data-path="images/connections/gmail.svg">
    Draft the dispute to the carrier with the specific charge codes and amounts already filled in.
  </Card>

  <Card title="Microsoft Outlook" icon="https://mintcdn.com/duvo-d8027998/O3tlM6eCuFk2uJpN/images/connections/outlook.svg?fit=max&auto=format&n=O3tlM6eCuFk2uJpN&q=85&s=e29aeb65c8cffce1cd3c83b81289b71f" href="/user-guide/connections/available-connections/microsoft-outlook" width="1831" height="1703" data-path="images/connections/outlook.svg">
    Send the same carrier correspondence from an Outlook mailbox.
  </Card>
</CardGroup>

## What this connection cannot do

<AccordionGroup>
  <Accordion title="Charge lines are not internally re-rateable" icon="calculator">
    Each charge line carries a reported rate amount, a rate basis and a quantity alongside its amount. **Those cannot be multiplied to re-derive the amount.** In Infor's own published samples the arithmetic does not hold, and the field Nexus calls a rate is labelled "Amount" in its own interface.

    Your agents get a trustworthy charge code, amount and currency per line. Re-rating against a contracted tariff needs that tariff from elsewhere.
  </Accordion>

  <Accordion title="Listing invoices does not return charge lines" icon="layer-group">
    A Nexus list query returns summary fields only, because the full objects are large, and a list row from Duvo never carries charge lines even when Nexus happens to include some. Each row reports how many charge lines Nexus returned for it, so a zero reads as "not returned", not as "no charges". Charge lines come from reading a single invoice.
  </Accordion>

  <Accordion title="Paging can skip a row" icon="arrows-rotate">
    Nexus orders the pages itself and publishes no ordering key, so a row can move across a page boundary while you page and never be returned. Every page that has a next page says so. De-duplicate on the invoice uid, and if completeness matters — it usually does on a freight audit — re-run the whole walk rather than trusting a single pass.

    Nexus does not always report a total for the query. When it does not, every non-empty page carries a `nextOffset` and the walk ends on the first empty page, so a page shorter than your `limit` is not the end. Follow `nextOffset` until a page comes back empty before treating the set as complete; the tool says so in a note on those pages.
  </Accordion>

  <Accordion title="Bill of lading numbers are usually empty" icon="link-slash">
    Nexus's invoice objects have bill of lading, booking and carrier reference fields, but they are empty in practice — these invoices are generated from the transport plan, so they key on the **transport plan number** and **tender number** instead.

    Every result lists which identifiers were actually populated, so your agents can pick a join that works on your data rather than one that silently matches nothing.
  </Accordion>

  <Accordion title="There is no incremental sync" icon="clock-rotate-left">
    Nexus publishes no "changed since" filter on the invoice objects, unlike its shipment objects, and no date field on them is confirmed to be indexed, so narrowing by a date window may be refused outright. There is no reliable way to fetch only what changed: a scheduled read pages through the whole object with `offset`, de-duplicates on the invoice uid, and compares against what it already stored.
  </Accordion>

  <Accordion title="Nexus already audits these invoices itself" icon="scale-balanced">
    Where Freight Pay & Audit is live, Nexus compares the carrier's invoice against its own expected invoice within a configured tolerance. Duvo adds value on what a tolerance match cannot see — differences inside the tolerance band, charges Nexus has no expected value for, and whether the expected value itself was built from current contract data.

    Worth setting expectations accordingly: this is a second opinion on an existing audit, not a first look at unexamined invoices.
  </Accordion>

  <Accordion title="No shipment or rate objects yet" icon="ship">
    This connection covers invoices. Nexus also exposes shipment objects (including the carrier's chargeable weight, which matters for reweigh disputes) and contracted costs from its rating engine. Those are not wired up yet.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Authentication is rejected" icon="triangle-exclamation">
    Two credentials can cause this, and they fail in a specific order. Check the **Data Key** first — Nexus rejects a call without it before considering the access keys. Then check the Access Key ID and Secret Access Key.

    Also confirm the keys belong to an **OAuth Client Agent** user. Keys from an HMAC Data API Agent User are a different credential type and will not work here.
  </Accordion>

  <Accordion title="Access is denied" icon="lock">
    The credentials are valid but the agent user is not entitled to the object. Check both the **Freight Pay & Audit license** and the user's Security Detail in Nexus.
  </Accordion>

  <Accordion title="Everything returns empty" icon="circle-question">
    An unfiltered query that returns zero rows usually means the tenancy is not licensed for Freight Pay & Audit, rather than that there are no invoices. An unlicensed module reads as absent, not as empty. Confirm the license before widening filters.
  </Accordion>
</AccordionGroup>
