Navix Public API (v1-v2)

Download OpenAPI specification:

Welcome to the Navix API. Navix automates freight audit and invoicing: your system (usually a TMS) sends Navix orders, Navix audits the invoices it receives from your vendors against them, and your system pulls back the results.

New to Navix? Start with the Quickstart, which takes you from your first API call to a finished audit.

The sidebar is organized like this:

Quickstart

This walkthrough takes you from your first API call to reading a finished audit. It uses the curl command line tool, but any HTTP client works.

The flow is the one most integrations are built around:

  1. Your system pushes an order to Navix.
  2. Navix receives the vendor's invoice and audits it against the order.
  3. Your system learns the invoice has been approved, and pulls the result.

If a term here is unfamiliar (tenant, vendor, approved, and so on), see the Glossary.

Before you begin

Your Navix customer success manager will give you:

  • A tenant UUID. If you're building your own integration, you'll normally get two: one for your sandbox tenant and one for production. Use the sandbox tenant until your integration works.
  • An API key.
  • A user account for the Navix UI, which is handy for seeing what your API calls did.

All requests go to https://api.navix.io. The examples below read your credentials from environment variables:

export NAVIX_API_KEY="<your API key>"
export NAVIX_TENANT_UUID="<your sandbox tenant UUID>"

See Authentication for details on how credentials are sent.

Step 1: Push an order

Navix needs to know about an order before it can audit an invoice for it. Use the Create an order endpoint. This example includes only the required fields; the endpoint reference lists many more (stops, items, reference numbers, and so on).

curl -X POST https://api.navix.io/v2/orders \
  -H "X-Api-Key: $NAVIX_API_KEY" \
  -H "X-Tenant-Uuid: $NAVIX_TENANT_UUID" \
  -H "Content-Type: application/json" \
  -d '{
    "orderNumber": "ORD-1001",
    "shipDate": "2026-10-20",
    "customer": {
      "externalId": "CUST-001",
      "name": "Example Shipper",
      "billingTerms": "Net30"
    },
    "vendors": [
      {
        "externalId": "CARRIER-001",
        "name": "Example Freight",
        "charges": [
          { "code": { "description": "Linehaul", "value": "LHL" }, "charge": 1250.00 }
        ]
      }
    ]
  }'

A successful call returns 202 Accepted with the order's external ID:

{ "externalId": "ORD-1001" }

202 means Navix has accepted the order and will import it shortly, not that it's visible yet. See Asynchronous Endpoints. If anything in the request is invalid you'll get a 400 that explains what to fix; see Errors and Conventions.

Because the externalId identifies the order (it defaults to orderNumber if you don't send one), sending the same order again updates it rather than creating a duplicate.

Step 2: Get an invoice into Navix

In most integrations your vendors send invoices to Navix directly, by EDI 210 or by email, so there's nothing for your system to call. When you're testing in the sandbox, ask your Navix contact to help you send a test invoice for the order you just pushed.

Navix then matches the invoice to the order and audits it. An auditor reviews it, or Navix approves it automatically. In the normal case the invoice ends up approved for payment. (An invoice can instead be terminated, which means it was rejected, for example as a duplicate. Most integrations don't need to track those.)

Step 3: Find out the audit is done

There are two ways to learn that an invoice has been approved. Pick whichever suits your system; many integrations use a webhook and also poll occasionally as a safety net.

Poll for approved invoices. List finalized invoices returns the invoices approved after StartTime, which is required and must be UTC. (Despite its name, this endpoint returns only approved invoices, not terminated ones.)

curl "https://api.navix.io/integration/v1/api/tenants/$NAVIX_TENANT_UUID/composite-vendor-invoices/finalized?StartTime=2026-10-20T00:00:00Z" \
  -H "X-Api-Key: $NAVIX_API_KEY"
{
  "currentPage": 0,
  "totalPages": 1,
  "pageSize": 20,
  "totalRecords": 1,
  "records": [
    {
      "uuid": "00000000-0000-0000-0000-000000000000",
      "status": "Approved",
      "finalizationDate": "2026-10-21T14:03:22Z",
      "source": "Email"
    }
  ]
}

(The values above are illustrative.) Notice that the endpoint is under /integration/v1. That doesn't make it deprecated; it's the current way to poll for finalized invoices. See API Versions.

Or receive a webhook. Navix can call your system when an invoice is approved (INVOICE_APPROVED). See Webhooks. Webhooks must be enabled for your tenant by your Navix contact.

Step 4: Pull the audit result

With an invoice UUID from step 3, call Get audit result:

curl "https://api.navix.io/integration/v2/api/tenants/$NAVIX_TENANT_UUID/composite-vendor-invoices/<invoice uuid>/result" \
  -H "X-Api-Key: $NAVIX_API_KEY"

The response contains the outcome of the audit, including the orders the invoice was matched to and the documents attached to them. A 404 means the invoice is still being audited, so try again later.

Where to go next

  • Integration Guides walk through the common flows in more detail, including downloading supporting documents and pre-billing. Start with Common Flows.
  • Webhooks lists every event Navix can send you.
  • Errors and Conventions covers error handling, retries, idempotency and pagination.
  • The API Reference sections document every endpoint in full.

Authentication

Every request to the Navix API must be authenticated with your API key. Most requests must also say which tenant you're acting for.

API key

Send your API key in the X-Api-Key header on every request:

X-Api-Key: <your API key>

Your Navix customer success manager issues your API key. Treat it like a password: keep it out of source control and client-side code, and contact Navix if you think it has been exposed.

Tenant

How you identify your tenant depends on the endpoint:

  • Most /v2/... endpoints require an X-Tenant-Uuid header containing your tenant UUID.
  • /integration/v1/... and /integration/v2/... endpoints take your tenant UUID in the URL, as the tenantUuid path parameter. They don't use the X-Tenant-Uuid header.

The reference documentation for each endpoint shows exactly which it expects. Header names are case-insensitive.

Sandbox and production

You'll normally have two tenants, each with its own UUID: a sandbox tenant for development and testing, and a production tenant. Both use the same base URL, https://api.navix.io; the tenant UUID you send determines which one you're talking to.

Authentication errors

  • 401 Unauthorized: the API key or tenant is missing or wasn't recognized.
  • 403 Forbidden: the credentials were recognized, but they aren't allowed to use that tenant or endpoint. A common cause is an X-Tenant-Uuid that doesn't belong to your API key.

See Errors and Conventions for the rest of the status codes.

Glossary

These terms have specific meanings in Navix. Each is listed with synonyms commonly used in the industry.

  • Tenant: You, a Navix customer; likely a broker or 3PL. You may have both a sandbox and a production tenant.
  • Order: Load, shipment, movement.
  • Invoice: Vendor bill, carrier invoice, AP invoice, vendor invoice.
  • Vendor: Carrier, warehouse, anyone that you pay.
  • Customer: Shipper, freight forwarder, anyone that pays you.
  • Document: Anything sent from your vendor; could be an invoice, bill of lading, delivery receipt, packing slip, and so on.
  • TMS: Transportation Management System. The guides use "TMS" for whatever system integrates with Navix, which could be a TMS or any other consumer of the API.

Invoice states

  • Approved Invoice: An invoice that has been audited and approved for payment. These are the invoices your TMS usually needs back from Navix.
  • Terminated Invoice: An invoice that has been rejected for payment, for example because it was a duplicate or was invalid in some way. Most integrations don't need these.
  • Finalized Invoice: An invoice that has been audited and is either "approved" or "terminated". It's the general term for an invoice whose audit is over.

A note on "finalized": despite its name, the List finalized invoices endpoint returns only approved invoices. Terminated invoices aren't included, and you don't need to filter them out.

Order and document approval

Navix can also approve an order or a document before an invoice has been received or audited. This is used for pre-billing: an approved order or approved document tells your TMS it can bill the customer. See the pre-billing guides.

Identifiers

  • A UUID is an identifier assigned by Navix.
  • An external ID is the identifier your own system uses for the same thing (for example, your TMS's order number). Orders, vendors and customers are matched using the external IDs you send.

API Versions

The Navix API has one current version (v2), a set of legacy v1 endpoints that remain supported, and a small number of provisional endpoints. In the sidebar these are the API Reference (v2), Legacy API (v1) and Provisional Endpoints sections.

Current API: v2

All new development happens on v2, and v2 is what you should build against. It supports multiple vendors and multiple invoices on a single order, and we're committed to its stability: we support these endpoints and won't make breaking changes to them.

Legacy (but not deprecated) API: v1

v1 is the original version of our API. We plan to keep supporting it without breaking changes. Be aware that "v1" doesn't automatically mean "deprecated":

If a non-provisional endpoint isn't marked deprecated, it's safe to build on.

Provisional endpoints

We want customers to have access to the latest features we're building. Provisional endpoints give you a glimpse of those features, but they aren't generally available.

⚠️ Provisional Endpoints Support

Do not use provisional endpoints unless you've been explicitly authorized to use them by your Navix account team. Outside of authorized, tenant-specific use cases, we will not provide support for these endpoints, and their use could have unintended side effects.

Breaking changes

Changes to stable endpoints are limited to ones that well-behaved clients can absorb:

  • Additive changes aren't breaking. For instance, adding a new property to a response isn't considered breaking, since API consumers should ignore unknown properties.
  • Don't send undocumented data. Although we ignore unrecognized fields, sending an unsupported property could cause a conflict if we later add a property with that name.
  • New enum values may be added over time. For instance, we regularly add support for new document types, so don't treat an unfamiliar value as an error.

Asynchronous Endpoints

Some Navix endpoints operate asynchronously and aren't instantaneous. There are a number of reasons for this. Usually, these operations are placed in a queue, which provides greater resiliency. Sometimes there's a multiple-step workflow that takes a bit of time to run. Either way, the endpoint validates your request and quickly returns a response telling you whether there were any errors.

202 Accepted

Following RESTful best practices, asynchronous endpoints return 202 Accepted rather than 200 OK.

For example, when you create an order with POST /v2/orders, several validations are run:

  • If any of them fail, a 400 Bad Request is returned with detail on which validations failed.
  • If the data is valid, a 202 Accepted is returned. This means the order has been durably stored and will be imported; you can assume it will be ingested successfully.

What to expect after a 202

  • The result may not immediately appear in other API requests or in the Navix UI. Usually these operations complete within seconds. Occasionally, such as during usage spikes, they take longer, and some (like creating an invoice) can take several minutes.
  • Don't assume the work is finished. Don't, for instance, request an order's invoices the instant you've pushed it. If you need to know when something is ready, use a webhook or poll.
  • Results that depend on an audit aren't available until the audit finishes. For example, Get audit result returns 404 for an invoice that's still being audited.

Errors and Conventions

This page collects behavior that applies across the whole API: how errors look, how to retry safely, how paging works, and how times are handled.

Errors

Navix uses standard HTTP status codes. The ones you'll see most often:

Status Meaning
200 / 202 Success. 202 Accepted means the request was accepted for asynchronous processing.
400 The request was invalid. The response describes what to fix.
401 Credentials are missing or weren't recognized. See Authentication.
403 Your credentials aren't allowed to use that tenant or endpoint.
404 The thing you asked for doesn't exist (yet). For example, an audit result for an invoice that's still being audited.
500 Something went wrong on our side.
503 The endpoint is temporarily unavailable.

A 400 for a validation failure includes a JSON body that identifies each problem and the field it applies to:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "5eee0c1a-1656-462a-ab6c-a3ee502fbd4f",
  "errors": {
    "InvoiceNumber": [
      "The InvoiceNumber field must be less than or equal to 64 characters long."
    ]
  }
}

Not every error response has a JSON body. Some, such as certain 401 and 403 responses, return a short plain-text message instead, so check the status code before trying to parse the body.

If you contact Navix support about a failed request, include the traceId when the response has one, along with the time of the request.

Retrying failed requests

  • Don't retry 400, 401, 403 or 404 responses without changing something. The same request will fail the same way.
  • Do retry 500 and 503 responses, and requests that time out or fail to connect, using exponential backoff (for example, waiting 1, 2, 4, then 8 seconds) and a cap on the number of attempts.
  • When you retry a request that creates or changes data, send an idempotency key so the retry can't be processed twice.

Idempotency

The endpoints that accept data from you (Create an order, Create invoice and Ingest documents) accept an optional X-Idempotency-Key header. It lets you retry a request safely, for example after a timeout, without risking the same operation happening twice.

  • Generate a unique value (a UUID works well) for each logical request, and send the same value when you retry that request.
  • Send the header only once per request.
  • If you don't send one, Navix derives one from your tenant and the request body.

Creating or updating an order is also naturally repeatable: an order is identified by its externalId, so sending the same order again updates it.

Pagination

Endpoints that can return a lot of records are paged. Currently these are List finalized invoices, Get List of Approved Documents and Get List of Approved Orders. Other list endpoints, such as the list of disputes on an invoice, return the complete list.

  • You choose the page with PageNumber and the page size with PageSize. Page numbers start at 0. (For the two POST endpoints these are pageNumber and pageSize in the request body; for List finalized invoices they're query parameters.)
  • For List finalized invoices the default page size is 20 and the maximum is 100.
  • The List finalized invoices response includes currentPage, totalPages, pageSize, totalRecords and records. Keep requesting pages until you've reached totalPages; a single page may not contain everything.

Dates and times

  • Timestamps are in UTC, in ISO 8601 format (for example, 2026-10-21T14:03:22Z). Time ranges you send, such as StartTime and EndTime, are interpreted as UTC.
  • Some fields are date only, such as an order's shipDate (for example, 2026-10-20). The endpoint reference says which fields are which.
  • For List finalized invoices, the range excludes StartTime and includes EndTime. The range applies to the time the invoice was finalized (approved): an invoice at exactly StartTime isn't returned, and one at exactly EndTime is. EndTime defaults to the present time.

Polling windows

When you poll with a time range, it's your system's responsibility to remember when it last polled, and to set StartTime (and EndTime) accordingly. If you miss a scheduled run, the next poll should simply use an earlier StartTime.

Plan for a small amount of clock drift: your server's clock might differ slightly from Navix's. If your job runs at 6:00:00 UTC, it's sensible to use an EndTime of 5:59:00 UTC, and to start your next window at that same moment.

Common Flows

The primary consumers of this API are tenant's TMS integrations (or the TMS itself). Throughout these guides, we refer to "TMS" (Transportation Management System) -- but this could be any consumer of the Navix API.

Navix's API is flexible, and there are multiple ways a TMS can integrate with it. These guides focus on the most common scenarios.

A simple TMS integration has two integration points with Navix:

  • TMS pushes orders to Navix.
  • TMS pulls completed audits from Navix.

Simple Integration Flow

A more complex integration may have several integration points with Navix:

  • TMS pushes orders to Navix.
  • TMS pushes invoices to Navix.
  • TMS pushes supporting documents to Navix.
  • Navix calls the TMS rating engine.
  • TMS pulls completed audits from Navix.
  • TMS pulls supporting documents from Navix.
  • TMS pulls dispute data and communications from Navix.

More Complex Integration Flow

It's worth noting that there may be data (usually invoices and supporting documents) that are being sent to Navix without going through the TMS. For instance, vendors (carriers) may be sending EDI 210 documents directly to Navix. Vendors may also be sending invoices and supporting documents via email.

The guides

Each of these guides covers one integration point in detail:

Navix can also call your system's rating engine during an audit. Other integration points, such as pushing invoices and documents or pulling disputes, are documented in the API Reference.

TMS Pushes Orders to Navix

In order to audit an invoice in Navix, Navix needs to know what order the invoice is for.

Use the "Create an order" (V2) endpoint to push an order to Navix.

We recommend:

  • The TMS should push order data to Navix regularly.
  • This could happen on a scheduled basis (perhaps every 15 minutes or every hour).
  • It can also happen in real-time (whenever a load/order is changed in the TMS).
  • Only orders that have been changed should be pushed to Navix.
  • Push orders to Navix after they have been tendered to a carrier, before the point in time when Navix may start receiving invoices.
  • You can push an order to Navix multiple times. Navix will perform an upsert based on the externalId. That is, if you push an order to Navix, if there's an existing order with the same externalId, it will be updated instead of inserted.
  • Send an externalId that correlates to the unique identifier for the order in the TMS. If you don't send one, it defaults to the orderNumber.

We recommend against:

  • Sending all open orders on a scheduled basis. (For instance, sending all tendered orders every hour, regardless of whether or not anything has been changed on the order.)
  • Storing or relying on order UUIDs. An order UUID refers to a specific version of the order data; subsequent updates/upserts will result in new order UUIDs.
  • Assuming the order will be ingested immediately. Order ingestion generally occurs in near real-time. However, due to the resilient and distributed nature of our system, ingestion can occasionally take longer.

TMS Pulls Completed Audits from Navix

When an invoice has been audited and approved (either by a user or automatically by Navix), the TMS needs to know the results of the audit.

An invoice can end its audit in one of two ways: it is approved for payment, or it is terminated (rejected for payment, for example because it was a duplicate or was invalid). Most TMS integrations only care about approved invoices, because those are the ones that need to be returned to the TMS, so that is what this guide covers. Both are called "finalized" invoices; see the Glossary.

There are two ways to find out about approved invoices:

  • Polling: On a scheduled basis, the TMS polls the Navix API for any invoices that have been approved since the last polling.
  • Webhook: Whenever an invoice is approved, Navix will call a webhook callback on an API hosted by the TMS.

Either way, the only data the TMS gets from either polling or a webhook is the UUID of an invoice that's been approved. The next step is to get the audit results.

If you do want to know about terminated invoices too, use the INVOICE_TERMINATED webhook. Polling doesn't return them.

Polling

Use the "List finalized invoices" endpoint to get a list of invoices approved during a given time period.

Despite the name, this endpoint returns only approved invoices. Terminated invoices are not included, so there's nothing to filter out.

Notes:

  • The results are paged. More than one page of results may be returned; be sure to check to see if there are additional pages.
  • It's the responsibility of the TMS to keep track of the last time polling was run, and to set the StartTime and EndTime accordingly. If the TMS misses a scheduled run, the next poll request should adjust the StartTime accordingly.
  • Note that the StartTime and EndTime are UTC, and are the times stored by Navix. We recommend planning for a small amount of "clock drift" -- that is, the time on your server might vary slightly from the times on Navix servers. So if you're running this process at 6:00:00 UTC, it might make sense to specify an EndTime of 5:59:00 UTC.
  • You can poll with whatever frequency you want. Most tenants find that polling every 10-15 minutes strikes a good balance between returning results quickly and avoiding an overly "chatty" integration.

Webhook

Use the INVOICE_APPROVED webhook to receive a webhook callback whenever an invoice is approved.

Notes:

  • Webhooks are triggered in real-time. So as soon as an invoice is approved, your callback URL will be immediately hit.
  • It's the responsibility of the TMS to handle the volume or fail in a prescribed fashion. Invoices are often approved in bulk, so there could be dozens, hundreds, or even thousands of webhook callbacks triggered in a very short period of time. Review the section on webhook delivery guarantees for more details on how Navix will retry webhooks.
  • Depending on the reliability of the TMS, it may be beneficial to supplement webhooks with occasional polling. That is, if there's a chance that the callback may fail or the TMS may miss some webhooks, the polling endpoint can be used to verify if any webhooks failed.

Getting Audit Results

Once you've received the UUID of an approved invoice, either by polling or webhook, use the "Get audit result" endpoint to get the results of an audit.

Notes:

  • Make sure to use the latest (v2) version of the "Get audit result" endpoint.
  • If you're pulling approved documents for pre-billing (in addition to getting audit results), you may end up with duplicate documents. That is, the documents you receive from the "Get List of Approved Documents" endpoint or the DOCUMENT_APPROVED webhook will also appear in the "Get audit result" endpoint. However, you can specify includeApprovedDocuments=false in the call to the "Get audit result" endpoint to filter out approved documents from the list of documents that appears in orders[n].documents.

TMS Pulls Supporting Documents from Navix

Getting Documents by Invoice UUID

After the TMS has pulled audit results for an invoice, it can retrieve the supporting documents for the invoice. Use the "Download invoice document" endpoint to download the raw file.

Notes:

  • The endpoint requires an invoice UUID and a document UUID. Document UUIDs are returned in the "Get audit result" endpoint, under orders.documents.uuid.
  • Additional information about the document is available from the "Get audit result" endpoint, such as the type of document ("Invoice", "Bill of Lading", etc.).
  • The endpoint returns the raw binary file.
  • Currently, all returned files will be in PDF format. However, this may change in the future, and API consumers should not assume that the returned files will always be PDFs.

TMS Pulls Pre-Bill Approved Orders from Navix

Pre-billing sends "approved" orders to the TMS before receiving or completing the audit of an invoice. This indicates that the TMS can generate a customer invoice for the order. Usually, the approval occurs when a proof of delivery is received and approved by an auditor.

There are two ways to implement this:

  • Polling: On a scheduled basis, the TMS polls the Navix API for any approved orders.
  • Webhook: Whenever an order is approved, Navix will call a webhook callback on an API hosted by the TMS.

Either way, the only data the TMS gets from either polling or a webhook is the external ID of the order.

Polling

To get a list of approved orders, call the Get List of Approved Orders endpoint. This endpoint lets you pass in a time range, and returns the external IDs of all orders approved during that period. Note that this endpoint is currently provisional; see API Versions.

Webhook

Use the ORDER_APPROVED webhook to receive a webhook callback whenever an order is approved.

Getting Order Documents

Once an order has been approved (and the TMS learns about it from either polling or a webhook callback), it can retrieve additional information about the documents on the order:

  • You can retrieve a list of all the documents on the order with the Get Document Uuids endpoint. This returns a list of document UUIDs.
  • Alternatively, you can retrieve a list of documents with additional metadata, such as document type, by calling the Get Document Metadata endpoint.
  • You can download the binary file of a document using the Get One Attachment endpoint. Currently, all returned files are in PDF format. However, this may change in the future, so API consumers should not assume that all returned files will always be PDFs.

TMS Pulls Approved Documents from Navix

When a document is approved, it indicates that the TMS can send the document to the customer/shipper. This can occur before the invoice is received or audited.

There are two ways to implement this:

  • Polling: On a scheduled basis, the TMS polls the Navix API for any approved documents.
  • Webhook: Whenever a document is approved, Navix will call a webhook callback on an API hosted by the TMS.

Either way, the only data the TMS gets from either polling or a webhook is the external ID of the order and the document UUID.

Polling

To get a list of approved documents, call the Get List of Approved Documents endpoint. This endpoint lets you pass in a time range, and returns the external order ID and document UUID of all documents approved during that period.

Webhook

Use the DOCUMENT_APPROVED webhook to receive a webhook callback whenever a document is approved.

Getting Documents

Once a document has been approved (and the TMS learns about it from either polling or a webhook callback), you can get the binary file with the Get One Attachment endpoint. Currently, all returned files are in PDF format. However, this may change in the future, so API consumers should not assume that all returned files will always be PDFs.

Notes:

  • An approved document will also match to an invoice once the invoice for the order has been received. This means approved documents will also be returned in the "Get audit result" endpoint. To filter approved documents out from that endpoint, include the includeApprovedDocuments=false parameter when calling "Get audit result".

Webhooks

A webhook is a callback mechanism that causes Navix to make an API request to a consumer system when events occur within Navix.

Our webhooks are "thin". That is, they're lightweight and usually contain IDs that can be used to retrieve additional data via API.

Webhook Callback Payload

All webhooks have the same payload structure as this example:

{
    "id": "00000000-0000-0000-0000-000000000000",
    "type": "DISPUTE_CREATED",
    "time": "2025-01-01T12:00:00.000000",
    "data": "{ \"invoiceUuid\": \"<uuid>\" }"
}
  • id is a unique identifier for the event. Note that this is not the identifier for the object (invoice, dispute, etc.) which triggered the event.
  • type is the specific type of event that triggered the webhook. Possible values include:
    • INVOICE_CREATED
    • INVOICE_APPROVED
    • INVOICE_TERMINATED
    • INVOICE_MATCHED
    • INVOICE_UNMATCHED
    • INVOICE_EXCEPTIONS_UPDATED
    • DISPUTE_CREATED
    • DISPUTE_UPDATED
    • DISPUTE_COMMUNICATION_CREATED
    • ORDER_APPROVED
    • DOCUMENT_APPROVED
  • time is the UTC time of when the event occurred.
  • data contains a JSON object with details for the event. The specific data varies depending on the type of event that occurred. Note that the JSON has been escaped.

Delivery Guarantees

The webhook consumer should return a status code between 200 and 299 (inclusive) within about 20 seconds. Later retry attempts allow up to 60 seconds.

If the consumer is unreachable, doesn't respond promptly, or returns a status code less than 200 or greater than 299, we will consider the delivery attempt failed and will make another attempt.

We use an exponential backoff algorithm to determine the time between delivery attempts, starting at a few seconds and increasing to a maximum of 1 hour. We will continue to attempt delivery for 8 hours beyond the initial attempt, after which the message will be discarded.

Webhook requests are sent with a User-Agent of Navix/1.0.

We aim for at-least-once delivery, so a single event may hit the webhook receiver multiple times. When that occurs, the id will be the same across the multiple requests, so it can be used as an idempotency key by consumers.

We cannot guarantee that webhooks will arrive in order. That is, if a dispute is updated twice, the webhook for the second update could arrive before the first. If that's likely to cause issues, we recommend recording the time field on the webhook and comparing that stored time to the time on any received webhook.

Event Types

INVOICE_CREATED

This event is raised whenever an invoice is created.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice which was created.

INVOICE_APPROVED

This event is raised whenever an invoice is approved. Note that this is only raised for approvals; terminated invoices raise INVOICE_TERMINATED instead.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice which was approved.

INVOICE_TERMINATED

This event is raised whenever an invoice is terminated, whether a user terminated it in Navix, it was terminated through the API, or Navix terminated it automatically (for example, when resolving a duplicate).

The Get invoice endpoint works for terminated invoices, so you can use it to retrieve the invoice number and reference numbers you originally sent us and correlate the invoice back to your own system.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice which was terminated.

INVOICE_MATCHED

This event is raised whenever an invoice is matched to an order. It is raised in both directions: when an invoice arrives and matches an existing order, and when an order arrives and matches an existing invoice.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000",
  "orderExternalId": "ORD_123"
}
  • invoiceUuid is the identifier for the matched invoice.
  • orderExternalId is the order Id as stored in the tenant system outside of Navix. If the order has no external Id, this defaults to the order number.

INVOICE_UNMATCHED

This event is raised whenever an invoice is unmatched from an order — either because it was fully unmatched, or because it was re-matched to a different order (in which case a corresponding INVOICE_MATCHED for the new order follows). Re-matching an invoice to the same order it was already matched to does not raise this event.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000",
  "orderExternalId": "ORD_123"
}
  • invoiceUuid is the identifier for the unmatched invoice.
  • orderExternalId is the order Id as stored in the tenant system outside of Navix. If the order has no external Id, this defaults to the order number.

INVOICE_EXCEPTIONS_UPDATED

This event is raised whenever the exceptions or work instructions on an invoice change.

The event carries only the invoice identifier. Use the Get invoice exceptions endpoint to retrieve the exceptions and work instructions currently open on the invoice. Only open items are returned, so an exception you received previously and no longer see in the response has been resolved.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice whose exceptions may have changed.

DISPUTE_CREATED

This event is raised whenever a new dispute is created.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000",
  "disputeUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice on which the dispute was created.
  • disputeUuid is the identifier for the newly created dispute.

DISPUTE_UPDATED

This event is raised whenever a dispute is updated. Note that creating and updating are separate events, so this event isn't raised when the dispute is initially created.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000",
  "disputeUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice associated with the dispute that was updated.
  • disputeUuid is the identifier for the updated dispute.

DISPUTE_COMMUNICATION_CREATED

This event is raised whenever a new communication is created on a dispute.

Communications are immutable, so there's no corresponding webhook for updates to a communication.

Note that whenever a dispute is created, an initial communication is usually created at the same time. It's possible the DISPUTE_COMMUNICATION_CREATED webhook will arrive before the DISPUTE_CREATED webhook.

data object

{
  "invoiceUuid": "00000000-0000-0000-0000-000000000000",
  "disputeUuid": "00000000-0000-0000-0000-000000000000",
  "communicationUuid": "00000000-0000-0000-0000-000000000000"
}
  • invoiceUuid is the identifier for the invoice associated with the dispute.
  • disputeUuid is the identifier for the dispute.
  • communicationUuid is the identifier for the created communication.

ORDER_APPROVED

This event is raised whenever an order is approved.

data object

{
  "orderExternalId": "ORD_123"
}
  • orderExternalId is the order Id as stored in the tenant system outside of Navix.

DOCUMENT_APPROVED

This event is raised whenever a document is approved.

data object

{
  "orderExternalId": "ORD_123",
  "documentUuid": "00000000-0000-0000-0000-000000000000"
}
  • documentUuid is the identifier for the document as stored in Navix.
  • orderExternalId is the order Id as stored in the tenant system outside of Navix.

Rating Engine

Navix provides the ability to call out to an endpoint in your system that can utilize your rating engine. Our system will allow an auditor to send an updated invoice from our system to your rating engine endpoint to get rated.

Delivery Guarantees

This is a webhook in the Navix system but it does not have the same guarantees as the other webhooks. (This is because rating engine calls run synchronously, while other webhooks are asynchronous.)

We will call your rating engine endpoint, and each attempt times out after 60 seconds. If the call fails because of a network error or timeout, or your endpoint returns 408, 500, 502, 503 or 504, we will retry once. Any other non-2xx response, including 400 and 422, is not retried.

In other words, calls to your rating engine webhook are managed in a different manner than other tenant provided webhooks. The mechanism, manner and guarantees of this webhook are different from the Webhooks tab mentioned earlier in the documentation.

Performance Concerns

It is important that performance is taken into account inside of rating engines. An auditor in the UI can call the rating engine with the press of a button. If a rating engine takes 15 seconds to complete, each audit will take an additional 15 seconds to complete with each rating engine call.

Setup

Getting started is straight forward. Our team and your team have a few tasks that need to be accomplished so you use this feature.

Implementation Responsibilities

Our system will make a call out to an endpoint url that you specify. That endpoint will need to handle the payload that we send, rate the payload and then return a response. You can view request payload and response structure in the Rating Engine Payload and Rating Engine Response sections below respectively. We do into more detail in the Endpoint Contract section

Here are the tasks for your team:

  1. Create an endpoint that satisfies the information found in the Endpoint Contract section
  2. Provide the url to that endpoint to the Navix team
  3. Contact your account manager so our team can generate a unique api key for you. This api key is the one all our requests will use so you can be sure that the requests are coming from our system. How it is used is covered in the Endpoint Contract section.

Here are the tasks for the Navix team:

  1. Provide you with a unique api key so you can be sure the requests are coming from us.
  2. Add your endpoint url to our system so we can contact you.
  3. Support you.

Endpoint Contract

In order for the Navix system to contact your rating engine we need an endpoint that meets the following requirements:

  1. The endpoint must be able to handle a POST request.
  2. The endpoint must handle an apikey query string argument. The apikey value is one that our team has generated for you. You can get this by contacting your account manager. Your endpoint should validate that the apikey value is the same that we provided you. If it is not, you should return a 401 Unauthorized status code.
  3. The endpoint must handle the request payload. The request payload is an invoice from our system that needs to be rated. You can learn more about the payload and what each field means in the Rating Engine Payload section below.
  4. The endpoint must map your system's raw rating response to the rating engine response that we are expecting. You can view that structure in the Rating Engine Response section below.
  5. The endpoint must return a 2xx response along with the structure provided in the Rating Engine Response section below. Please note that we are expecting a single rating engine response from your endpoint. You might have a rating engine that rate shops multiple vendors, please trim down your response to only include the selected vendor response. If your rating engine throws an exception, it is beneficial to the auditor to return a 2xx response and populate the RawResponse field with the exception. These exceptions provides feedback to the auditors so they can make corrections or let them know that a system is temporarily down.

If the endpoint returns a 2xx response we mark that as a success. All other responses are treated as failures, and are retried only as described in Delivery Guarantees.

We can visualize the contract the following way:

Endpoint Contract Flow

Rating Engine Payload

Our payload is an invoice from our system. We have provided an example below to show the structure and a sample of data. An explanation of the fields is below the example.

{
  "Uuid": "e4c3b17a-d207-43f9-ba2d-f61d068c7808",
  "ExternalOrderId": "MyOrderId",
  "FreightChargeTerms": "Prepaid",
  "DeliveryDate": "2024-04-11T12:34:56Z",
  "ShipDate": "2024-04-01T08:00:00Z",
  "Vendor": {
    "ExternalId": "147-888",
    "SCAC": "SAIA"
  },
  "Customer": {
    "ExternalId": "6594HH4"
  },
  "Stops": [
    {
      "Type": "Origin",
      "City": "Beverly Hills",
      "Zip": "90210",
      "CountryCode": "USA",
      "StateCode": "CA"
    },
    {
      "Type": "Destination",
      "City": "Dallas",
      "Zip": "75080",
      "CountryCode": "USA",
      "StateCode": "TX"
    }
  ],
  "LineItems": [
    {
      "Description": "Navix branded shoes",
      "HandlingUnit": "Pallet",
      "HandlingUnitCode": "PLT",
      "HandlingUnitCount": 4,
      "Weight": 231.10,
      "WeightUnit": "LBS",
      "Class": 100.00,
      "Height": 50.00,
      "Width": 40.00,
      "Length": 48.00,
      "Stackable": true
    }
  ],
  "VendorCharges": [
    {
      "Code": "ACH",
      "PostMapped": {
        "ChargeTypeUuid": "74473142-1439-48CD-ACA0-15507658CAE3",
        "ChargeType": "Limited Access Delivery"
      }
    }
  ],
  "OrderMetadata": {
    "AnyValue": {
      "ForInstanceATrackingNumber": "123-789",
      "OrAnything": "2026-06-01"
    },
    "SomeOtherValue": {
      "sample1": "value1"
    }
  }
}
  • Uuid is a unique identifier for the invoice in the Navix system.
  • ExternalOrderId is the order id in your system that this invoice is for.
  • FreightChargeTerms is how the freight is paid. Possible values include: Collect, Prepaid, Prepaid & Add and Third Party
  • DeliveryDate is the UTC datetime of when the shipment was delivered.
  • ShipDate is the UTC datetime of when the shipment was shipped.
  • Vendor
    • ExternalId is the id in your system that this vendor is known as.
    • SCAC is the SCAC code for this vendor.
  • Customer
    • ExternalId is the id in your system that this customer is known as.
  • Stops
    • Stops.Type is what type of stop this is. Possible values include: Origin, Destination and BillTo.
    • Stops.City is city for this stop.
    • Stops.Zip is the zip code for this stop.
    • Stops.CountryCode is the country code for this stop. Possible values include: USA, CAN and MEX.
    • Stops.StateCode is the state code for this stop.
  • LineItems
    • LineItems.Description is the description for this line item.
    • LineItems.HandlingUnit is the container for this line item. Possible values include: Pallet, Drum, Bag, Barrels, Crates, Bundles, Pieces, Loose, Boxes, Cases, Carton and Totes.
    • LineItems.HandlingUnitCode is the alias for the HandlingUnit above.
    • LineItems.HandlingUnitCount is how many containers are used for this line item
    • LineItems.Weight is the weight for this line item.
    • LineItems.WeightUnit is the weight unit used for this line item. Possible values include: LBS and KG
    • LineItems.Class is the shipping class.
    • LineItems.Height is the height for this line item.
    • LineItems.Width is the width for this line item.
    • LineItems.Length is the length for this line item.
    • LineItems.Stackable indicates whether line item is stackable.
  • VendorCharges
    • Code the charge code in your system for this charge.
    • PostMapped is the Navix charge type this charge is currently classified as. Because Code can vary by carrier and is not guaranteed to be one of your codes, PostMapped is the reliable way to identify what a charge is.
      • PostMapped.ChargeTypeUuid is the unique identifier of the Navix charge type.
      • PostMapped.ChargeType is the description of the Navix charge type.
  • OrderMetadata is a set of metadata associated with the order this invoice was matched to. It is an object whose keys are metadata group names and whose values are objects of string key/value pairs. This is only present when the invoice is matched to an order; it will be null or omitted for orderless invoices.

Rating Engine Response

Once the invoice has been rated, we need the results mapped in a format our system can understand. Please note that we are expecting a single rating engine response from your endpoint. You might have a rating engine that rate shops multiple vendors, please trim down your response to only include the selected vendor response.

We have provided an example below to show the structure and a sample of data. An explanation of the fields is below the example.

{
  "RawResponse": "...",
  "RawResponseType": "JSON",
  "VendorCharges": [
    {
      "Code": "ACH",
      "Description": "LIMITED ACCESS DELIVERY",
      "PostMapped": {
        "ChargeTypeUuid": "74473142-1439-48CD-ACA0-15507658CAE3",
        "ChargeType": "Limited Access Delivery"
      },
      "Amount": 83.2500,
      "Rate": 55.5000,
      "Quantity": 1.5000,
      "Qualifier": "PerMile"
    },
    {
      "Code": "NFY",
      "Description": "NOTIFICATION FEE",
      "Amount": 106.52
    }
  ],
  "CustomerCharges": [
    {
      "Code": "ACH",
      "Description": "LIMITED ACCESS DELIVERY",
      "Amount": 59.35
    }
  ] 
}
  • RawResponse is a raw response from your rating engine. This can be the response when a rate was returned or in the case where there was an exception from the rating engine. Providing this can be beneficial to auditors. Auditors will have the visibility to see this response in the UI.
  • RawResponseType is format of the RawResponse field. Possible values are JSON, XML and TEXT.
  • VendorCharges
    • Code the charge code in your system for this charge.
    • Description is a description of the charge.
    • PostMapped (optional) lets you return a charge already mapped to a Navix charge type, in addition to the Code/Description. When provided, we use it to identify the charge: PostMapped.ChargeTypeUuid is matched first, then PostMapped.ChargeType (description) as a fallback, before falling back to Code/Description. See How We Identify Returned Charges below.
      • PostMapped.ChargeTypeUuid is the unique identifier of the Navix charge type.
      • PostMapped.ChargeType is the description of the Navix charge type.
    • Amount is the amount for this charge.
    • Rate represents the price per unit as defined by Qualifier.
    • Quantity is the number of units that the Rate applies to, aligned to the Qualifier’s unit.
    • Qualifier indicates the unit type for Rate and Quantity calculations. Supported values: PerPound, PerHundredweight, PerTon, PerMile, PerKilometer, PerHour, PerCase, PerPallet, PerUnit, Percent.
  • CustomerCharges does not accept PostMapped. Customer charges are always identified by Code and Description (see How We Identify Returned Charges below).
    • Code is the same as VendorCharges.Code above.
    • Description is the same as VendorCharges.Description above.
    • Amount is the same as VendorCharges.Amount above but relevant to a customer.
    • Rate is the same as VendorCharges.Rate above.
    • Quantity is the same as VendorCharges.Quantity above.
    • Qualifier is the same as VendorCharges.Qualifier above.

How We Identify Returned Charges

Each charge you return is assigned to a Navix charge type. That charge type determines which line of the charges grid the amount is shown on and which invoice charge it is compared against.

Vendor charges with PostMapped

  1. PostMapped.ChargeTypeUuid is matched against the Navix charge types.
  2. If there is no match, PostMapped.ChargeType is used, but only when it matches exactly one Navix charge type description (case-insensitive).
  3. If neither matches, we fall back to Code/Description as described below. No error is returned, so an incorrect ChargeTypeUuid is not reported back to you.

The simplest way to keep your rating aligned with the invoice is to copy the PostMapped we sent on a vendor charge in the Rating Engine Payload onto the vendor charge you return for it. This works regardless of the codes your rating engine uses internally.

Customer charges, and vendor charges without a usable PostMapped

Code and Description are matched against your tenant charge codes:

  1. If only one of your tenant charge codes uses that Code, the charge is assigned to it and Description is not considered.
  2. If more than one of your tenant charge codes uses that Code, Description must match one of them (case-insensitive).
  3. Otherwise the charge is classified as Unknown. Unknown rated amounts are left out of the variance comparison and automated audit decisions for that line.

Only return codes that exist in your tenant charge codes. If a single code covers several kinds of charge, for example a generic accessorial code, add a tenant charge code for each Code + Description combination your rating engine returns. Once a code has more than one tenant charge code, any description without its own tenant charge code is classified as Unknown.

Important Rate Qualifier Validation Rules

If any of these validations fail, we'll display the validation message results to auditors through the button next to the Audit column in the charges grid within the Navix App, similar to how validation messages are currently shown when we receive a 400 Bad Request response.

  • Rate qualifier properties (Rate, Quantity, Qualifier) must be used as a complete set - either all three must be provided together, or all three must be null/omitted
  • When all three are provided, the system validates that Amount equals Rate × Quantity (with 4 decimal places precision)
  • Qualifier values are strictly validated against our supported enumeration

Customers

Get a customer

Retrieves a customer by its external ID (the ID used in your system / TMS).

Authorizations:
x-api-key
path Parameters
externalId
required
string

(Required) The customer's external ID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
externalId
string

An ID used by the API consumer's system, such as the ID in the TMS.

name
string or null

The name of the customer.

billingTerms
string or null
Enum: "Net0" "Net1" "Net2" "Net3" "Net4" "Net5" "Net6" "Net7" "Net8" "Net9" "Net10" "Net11" "Net12" "Net13" "Net14" "Net15" "Net16" "Net17" "Net18" "Net19" "Net20" "Net21" "Net22" "Net23" "Net24" "Net25" "Net26" "Net27" "Net28" "Net29" "Net30" "Net31" "Net32" "Net33" "Net34" "Net35" "Net36" "Net37" "Net38" "Net39" "Net40" "Net41" "Net42" "Net43" "Net44" "Net45" "Net46" "Net47" "Net48" "Net49" "Net50" "Net51" "Net52" "Net53" "Net54" "Net55" "Net56" "Net57" "Net58" "Net59" "Net60" "Net61" "Net62" "Net63" "Net64" "Net65" "Net66" "Net67" "Net68" "Net69" "Net70" "Net71" "Net72" "Net73" "Net74" "Net75" "Net76" "Net77" "Net78" "Net79" "Net80" "Net81" "Net82" "Net83" "Net84" "Net85" "Net86" "Net87" "Net88" "Net89" "Net90" "Net91" "Net92" "Net93" "Net94" "Net95" "Net96" "Net97" "Net98" "Net99" "Net100" "Net101" "Net102" "Net103" "Net104" "Net105" "Net106" "Net107" "Net108" "Net109" "Net110" "Net111" "Net112" "Net113" "Net114" "Net115" "Net116" "Net117" "Net118" "Net119" "Net120" "Net121" "Net122" "Net123" "Net124" "Net125" "Net126" "Net127" "Net128" "Net129" "Net130" "Net131" "Net132" "Net133" "Net134" "Net135" "Net136" "Net137" "Net138" "Net139" "Net140" "Net141" "Net142" "Net143" "Net144" "Net145" "Net146" "Net147" "Net148" "Net149" "Net150" "Net151" "Net152" "Net153" "Net154" "Net155" "Net156" "Net157" "Net158" "Net159" "Net160" "Net161" "Net162" "Net163" "Net164" "Net165" "Net166" "Net167" "Net168" "Net169" "Net170" "Net171" "Net172" "Net173" "Net174" "Net175" "Net176" "Net177" "Net178" "Net179" "Net180" "Net181" "Net182" "Net183" "Net184" "Net185" "Net186" "Net187" "Net188" "Net189" "Net190" "Net191" "Net192" "Net193" "Net194" "Net195" "Net196" "Net197" "Net198" "Net199" "Net200" "Net201" "Net202" "Net203" "Net204" "Net205" "Net206" "Net207" "Net208" "Net209" "Net210" "Net211" "Net212" "Net213" "Net214" "Net215" "Net216" "Net217" "Net218" "Net219" "Net220" "Net221" "Net222" "Net223" "Net224" "Net225" "Net226" "Net227" "Net228" "Net229" "Net230" "Net231" "Net232" "Net233" "Net234" "Net235" "Net236" "Net237" "Net238" "Net239" "Net240" "Net241" "Net242" "Net243" "Net244" "Net245" "Net246" "Net247" "Net248" "Net249" "Net250" "Net251" "Net252" "Net253" "Net254" "Net255" "Net256" "Net257" "Net258" "Net259" "Net260" "Net261" "Net262" "Net263" "Net264" "Net265" "Net266" "Net267" "Net268" "Net269" "Net270" "Net271" "Net272" "Net273" "Net274" "Net275" "Net276" "Net277" "Net278" "Net279" "Net280" "Net281" "Net282" "Net283" "Net284" "Net285" "Net286" "Net287" "Net288" "Net289" "Net290" "Net291" "Net292" "Net293" "Net294" "Net295" "Net296" "Net297" "Net298" "Net299" "Net300" "Net301" "Net302" "Net303" "Net304" "Net305" "Net306" "Net307" "Net308" "Net309" "Net310" "Net311" "Net312" "Net313" "Net314" "Net315" "Net316" "Net317" "Net318" "Net319" "Net320" "Net321" "Net322" "Net323" "Net324" "Net325" "Net326" "Net327" "Net328" "Net329" "Net330" "Net331" "Net332" "Net333" "Net334" "Net335" "Net336" "Net337" "Net338" "Net339" "Net340" "Net341" "Net342" "Net343" "Net344" "Net345" "Net346" "Net347" "Net348" "Net349" "Net350" "Net351" "Net352" "Net353" "Net354" "Net355" "Net356" "Net357" "Net358" "Net359" "Net360" "Net361" "Net362" "Net363" "Net364" "Net365" "Prepaid"

The billing term for the customer (e.g. 'Net30').

currency
string or null
Enum: "USD" "CAD" "MXN"

The customer's currency. Core accepts USD, CAD and MXN.

startDate
string or null <date-time>

The start date of the customer.

endDate
string or null <date-time>

The end date of the customer.

object or null

Tenant-managed metadata, keyed group => key => value.

Array of objects (customerContactResponse)

Every contact Navix holds for the customer. Always present — an empty array when the customer has no contacts.

Array of objects (customerAddressResponse)

Every address Navix holds for the customer. Always present — an empty array when the customer has no addresses.

Response samples

Content type
application/json
{
}

Create or update a customer

Upserts a customer based on its external ID — creates it if new, updates it if it already exists. Warning: metadata is fully replaced on each PUT; if metadata is omitted, any existing metadata is cleared. Use PATCH /v2/customers/{externalId}/metadata for selective updates. The contacts and addresses collections are also replaced in full, but follow a different omitted-versus-empty rule: a collection that is sent is the complete set and replaces everything Navix holds, an empty array clears the collection, and a collection that is omitted (or sent as null) leaves the existing children untouched.

Authorizations:
x-api-key
header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The customer to create or update.

externalId
required
string [ 0 .. 450 ] characters

(Required) An ID used by the API consumer's system, such as the ID in the TMS.

name
string or null [ 0 .. 255 ] characters

The name of the customer.

startDate
string or null <date-time>

Optional start date; defaults to the tenant's DefaultCustomerStartDate when omitted.

endDate
string or null <date-time>

Optional end date.

currency
string or null
Enum: "USD" "CAD" "MXN"

The customer's currency, one of USD, CAD or MXN. Defaults to USD when omitted.

billingTerms
string or null
Enum: "Net0" "Net1" "Net2" "Net3" "Net4" "Net5" "Net6" "Net7" "Net8" "Net9" "Net10" "Net11" "Net12" "Net13" "Net14" "Net15" "Net16" "Net17" "Net18" "Net19" "Net20" "Net21" "Net22" "Net23" "Net24" "Net25" "Net26" "Net27" "Net28" "Net29" "Net30" "Net31" "Net32" "Net33" "Net34" "Net35" "Net36" "Net37" "Net38" "Net39" "Net40" "Net41" "Net42" "Net43" "Net44" "Net45" "Net46" "Net47" "Net48" "Net49" "Net50" "Net51" "Net52" "Net53" "Net54" "Net55" "Net56" "Net57" "Net58" "Net59" "Net60" "Net61" "Net62" "Net63" "Net64" "Net65" "Net66" "Net67" "Net68" "Net69" "Net70" "Net71" "Net72" "Net73" "Net74" "Net75" "Net76" "Net77" "Net78" "Net79" "Net80" "Net81" "Net82" "Net83" "Net84" "Net85" "Net86" "Net87" "Net88" "Net89" "Net90" "Net91" "Net92" "Net93" "Net94" "Net95" "Net96" "Net97" "Net98" "Net99" "Net100" "Net101" "Net102" "Net103" "Net104" "Net105" "Net106" "Net107" "Net108" "Net109" "Net110" "Net111" "Net112" "Net113" "Net114" "Net115" "Net116" "Net117" "Net118" "Net119" "Net120" "Net121" "Net122" "Net123" "Net124" "Net125" "Net126" "Net127" "Net128" "Net129" "Net130" "Net131" "Net132" "Net133" "Net134" "Net135" "Net136" "Net137" "Net138" "Net139" "Net140" "Net141" "Net142" "Net143" "Net144" "Net145" "Net146" "Net147" "Net148" "Net149" "Net150" "Net151" "Net152" "Net153" "Net154" "Net155" "Net156" "Net157" "Net158" "Net159" "Net160" "Net161" "Net162" "Net163" "Net164" "Net165" "Net166" "Net167" "Net168" "Net169" "Net170" "Net171" "Net172" "Net173" "Net174" "Net175" "Net176" "Net177" "Net178" "Net179" "Net180" "Net181" "Net182" "Net183" "Net184" "Net185" "Net186" "Net187" "Net188" "Net189" "Net190" "Net191" "Net192" "Net193" "Net194" "Net195" "Net196" "Net197" "Net198" "Net199" "Net200" "Net201" "Net202" "Net203" "Net204" "Net205" "Net206" "Net207" "Net208" "Net209" "Net210" "Net211" "Net212" "Net213" "Net214" "Net215" "Net216" "Net217" "Net218" "Net219" "Net220" "Net221" "Net222" "Net223" "Net224" "Net225" "Net226" "Net227" "Net228" "Net229" "Net230" "Net231" "Net232" "Net233" "Net234" "Net235" "Net236" "Net237" "Net238" "Net239" "Net240" "Net241" "Net242" "Net243" "Net244" "Net245" "Net246" "Net247" "Net248" "Net249" "Net250" "Net251" "Net252" "Net253" "Net254" "Net255" "Net256" "Net257" "Net258" "Net259" "Net260" "Net261" "Net262" "Net263" "Net264" "Net265" "Net266" "Net267" "Net268" "Net269" "Net270" "Net271" "Net272" "Net273" "Net274" "Net275" "Net276" "Net277" "Net278" "Net279" "Net280" "Net281" "Net282" "Net283" "Net284" "Net285" "Net286" "Net287" "Net288" "Net289" "Net290" "Net291" "Net292" "Net293" "Net294" "Net295" "Net296" "Net297" "Net298" "Net299" "Net300" "Net301" "Net302" "Net303" "Net304" "Net305" "Net306" "Net307" "Net308" "Net309" "Net310" "Net311" "Net312" "Net313" "Net314" "Net315" "Net316" "Net317" "Net318" "Net319" "Net320" "Net321" "Net322" "Net323" "Net324" "Net325" "Net326" "Net327" "Net328" "Net329" "Net330" "Net331" "Net332" "Net333" "Net334" "Net335" "Net336" "Net337" "Net338" "Net339" "Net340" "Net341" "Net342" "Net343" "Net344" "Net345" "Net346" "Net347" "Net348" "Net349" "Net350" "Net351" "Net352" "Net353" "Net354" "Net355" "Net356" "Net357" "Net358" "Net359" "Net360" "Net361" "Net362" "Net363" "Net364" "Net365" "Prepaid"

Billing term (e.g. 'Net30'). Defaults to 'Net30'. Possible values are Net0-Net365 and Prepaid.

object or null

Tenant-managed metadata, keyed group => key => value. On a PUT this fully replaces the customer's stored metadata — use PATCH /v2/customers/{externalId}/metadata for selective updates.

Array of objects or null (customerContactRequest) <= 100 items

The complete set of contacts. Replaces every contact Navix holds; an empty array clears them, and omitting the field leaves them untouched. At most 100 per request.

Array of objects or null (customerAddressRequest) <= 100 items

The complete set of addresses. Replaces every address Navix holds; an empty array clears them, and omitting the field leaves them untouched. At most 100 per request.

Responses

Request samples

Content type
application/json
{
}

Update a customer's metadata

Selectively updates a customer's metadata. Each top-level group in the body replaces that group; a group sent as null is removed; groups not included are left unchanged.

Authorizations:
x-api-key
path Parameters
externalId
required
string

(Required) The customer's external ID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

Partial metadata to merge (group => key => value). Send a group as null to delete it.

additional property
object (dictionary_string)

Responses

Response Schema: application/json
additional property
object (dictionary_string)

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Dispute Reason Groups

Dispute reasons in Navix are organized into Dispute Reason Groups, configured per tenant. The Disputes API (GET /v2/invoices/{invoiceUuid}/disputes and GET /v2/invoices/{invoiceUuid}/disputes/{disputeUuid}) identifies the group each reason belongs to, so you can route or categorize disputes by group in your own systems.

Each entry in a dispute's reasons[] collection includes two group fields:

Field Type Description
disputeReasonGroupUuid string (uuid), nullable The UUID of the Dispute Reason Group the reason currently belongs to.
disputeReasonGroupDescription string, nullable The display description of that group.
{
  "description": "Rate discrepancy",
  "createdAt": "2026-08-01T14:03:22Z",
  "resolvedAt": null,
  "disputeReasonGroupUuid": "3f2a9c1e-7b44-4a1d-9c5e-2f8d6b1a4e07",
  "disputeReasonGroupDescription": "Carrier Rates"
}

Behavior notes

Please read these before building routing or reporting logic on these fields:

  • Both fields are always present, and always null together. You will never receive a group UUID without its description, or vice versa.
  • Values reflect current configuration, not point-in-time history. Reason groups are reassignable in Navix. A dispute resolved months ago reports whatever group its reason belongs to today. Do not treat these fields as a historical record for reporting.
  • null is an expected value, returned when the reason cannot be resolved to a group:
    • the reason was created via the API with free text that does not match your tenant's configured dispute reasons (dispute creation does not validate reasons against configuration);
    • the reason belongs to a dispute created before reason identifiers were persisted and its configured reason was since renamed or deleted (a fixed, shrinking population);
    • the configured reason is not assigned to any group.
  • Availability is fail-soft. If group configuration is temporarily unavailable, the endpoints still return disputes successfully with these two fields as null.

Routing guidance

Route on disputeReasonGroupUuid rather than the description — the UUID is stable across group renames. Treat null as an "unrouted" or default bucket.

Disputes

List disputes

This returns the complete list of disputes on a single invoice. It's assumed that the total number of disputes is relatively small, so there's no paging, filtering, etc. Note that communications are not included, those must be retrieved separately.

Note that the list is returned in an undefined order.

A dispute is associated with a single party. However, there may be multiple reasons for a single dispute, and they may be created or resolved at different times.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
Array
uuid
string <uuid>

The unique identifier of the dispute

eTag
string

A concurrency key for the dispute. When mutating a dispute, the request will be rejected as a 409 Conflict if the eTag doesn't match the current eTag value for the dispute

createdAt
string <date-time>

The date on which the dispute was created

resolvedAt
string <date-time>

The date on which the dispute was resolved. The dispute is considered resolved when all dispute reasons have been resolved. This is null on an active (unresolved) dispute

party
string
Enum: "Vendor" "Tenant" "Customer"

The party to which the dispute applies

Array of objects (disputeReasonResponse)

The reasons for the dispute. Note that a single dispute may have multiple reasons

Response samples

Content type
application/json
[
]

Get a dispute

This returns a single dispute on a single invoice. Note that communications are not included, those must be retrieved separately.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

disputeUuid
required
string <uuid>

(Required) The UUID of the dispute.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
uuid
string <uuid>

The unique identifier of the dispute

eTag
string

A concurrency key for the dispute. When mutating a dispute, the request will be rejected as a 409 Conflict if the eTag doesn't match the current eTag value for the dispute

createdAt
string <date-time>

The date on which the dispute was created

resolvedAt
string <date-time>

The date on which the dispute was resolved. The dispute is considered resolved when all dispute reasons have been resolved. This is null on an active (unresolved) dispute

party
string
Enum: "Vendor" "Tenant" "Customer"

The party to which the dispute applies

Array of objects (disputeReasonResponse)

The reasons for the dispute. Note that a single dispute may have multiple reasons

Response samples

Content type
application/json
{
}

Get one attachment

This returns a single attachment file for the given communication.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

disputeUuid
required
string <uuid>

(Required) The UUID of the dispute.

communicationUuid
required
string <uuid>

(Required) The UUID of the communication.

identifier
required
string

(Required) The identifier should be the name of the attachment.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Headers
Content-Disposition
string

Specifies the presentation and file type of the response content.

Content-Type
string

Specifies the MIME type of the response content.

Response Schema: application/octet-stream
string <binary>

List communications

This returns the complete list of communications associated with a dispute.

A communication has an email property with the email-specific fields when it was emailed by Navix, received by email, or recorded through the API with email fields. Otherwise it was internal to the Navix app and the email property isn't present.

Every communication also carries DisputeCreatedByEmail: the email of the user who created the dispute (not the author of that communication). It is the same on every communication of the dispute, and null for automatically created disputes or when the email can't be resolved.

Note that the list is returned in an undefined order.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

disputeUuid
required
string <uuid>

(Required) The UUID of the dispute.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
Array
uuid
string <uuid>

The unique identifier of the communication

createdAt
string <date-time>

The date on which the communication was created

text
string

The text of the communication. If it was an email, this is the email body

object

If the communication was an email, this is the email-specific parts of the communication; otherwise this is null

Array of objects (communicationAttachmentResponse)

A list of attachments on the communication

disputeCreatedByEmail
string or null

The email of the user who created the dispute, not the author of this communication. It is the same on every communication of the dispute, and null for automatically created disputes or when the email can't be resolved

Response samples

Content type
application/json
[
]

Create communication

This creates a communication on a dispute.

When Navix sends your dispute emails (the default), it emails the dispute's contacts from your dispute mailbox, unless emails are turned off for the dispute. to and cc replace the contacts for this message only. from and timestamp are rejected, except on Inbound: the email goes out now, from your dispute mailbox.

When your tenant sends dispute emails itself, Navix sends nothing and records the from, to, cc, direction and timestamp you give. timestamp becomes the communication's creation date.

An Inbound communication is never sent and records the from, to, cc and timestamp you give. When it is the newest communication, it sets the dispute to waiting on reply.

attachments takes up to 10 PDF files in base64, 20MB in total.

The DISPUTE_COMMUNICATION_CREATED event fires for every communication, including the ones Navix doesn't send. A retried request creates a second communication.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

disputeUuid
required
string <uuid>

(Required) The UUID of the dispute.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The communication to create.

text
string

The text of the communication. If the dispute generates emails, this will be the body of the emails

subject
string

The subject of the communication. If the dispute generates emails, this will be the subject of the emails

direction
string or null

Inbound: received from the vendor (sets the dispute to waiting on reply; Navix never sends it). Outbound: sent to the vendor.

from
string or null

Only on Inbound communications, or when your tenant sends dispute emails itself. The sender's email address. When Navix sends, the email always comes from your dispute mailbox.

to
Array of strings or null

The recipients' email addresses. When Navix sends, they replace the dispute's contacts for this message only.

cc
Array of strings or null

The copied recipients' email addresses. When Navix sends, they replace the dispute's copied contacts for this message only.

timestamp
string or null <date-time>

Only on Inbound communications, or when your tenant sends dispute emails itself. When the email was sent or received, with a UTC offset (ISO 8601). It is stored as the communication's creation date.

Array of objects or null (communicationAttachmentRequest)

PDF files in base64, up to 10 and 20MB in total. They are stored on the communication, and attached to the email when Navix sends one.

Responses

Response Schema: application/json
uuid
string <uuid>

The unique identifier for the communication

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Documents

Ingest documents

This endpoint ingests documents as a base64 string. As the process is asynchronous the processed documents will not appear in the system instantaneously.

  • Uploads to this endpoint go through a complex machine learning process. It differs from the 'Document Attachment' endpoint which simply allows files to be uploaded and associated with an existing invoice record.

  • This process works with models trained on an existing suite of auditing documents, and is occasionally supplemented by a human-in-the-loop to help guide and improve training.

  • It performs the following steps:

    • Works with any sort of audit-related document (invoice, bill of lading, notice of assignment, etc.)
    • Works with files in multiple formats (PDF, JPG, PNG, TIFF, etc.)
    • Separates pages within a file into multiple documents as necessary (e.g. separates an invoice on page 1 of a PDF from the bill of lading on page 2 of the same PDF file)
    • Converts all document formats to PDF
    • Classifies the document (currently based on a list of around 30 different document types)
    • Identifies relevant fields in the documents (”Invoice Date”, “Ship To”, “Bill To”, etc.)
    • Transcribes text and data from the documents (using OCR)
    • For invoice documents, creates a new invoice record, based on the data transcribed from the invoice. This may include supplemental data from other documents in the same submission. That is, if page 1 was an invoice and page 2 was a bill of lading, data from the bill of lading might be used on the invoice record if it wasn't present on the invoice
    • For non-invoice documents, attempts to match the document with an existing invoice record (using reference numbers and other identifiers)
    • Attach the resulting PDF file(s) to the invoice record. This occurs for both the invoice document itself and supporting documents.

You must be explicitly granted access to use this endpoint. Please contact your Customer Success Manager to request access.

Authorizations:
x-api-key
header Parameters
X-Idempotency-Key
string

(Optional) Provide an X-Idempotency-Key to safely retry the request without accidentally performing the same operation twice.

X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The documents to create.

externalId
string

The external system's unique identifier used to correlate this document request

externalOrderId
string

The unique identifier the tenant has assigned for the Invoice, if any

externalInvoiceId
string
required
Array of objects (supportingDocumentRequest)

A list of documents in Base64 format

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Invoices

Get audit result

Get the results of an audit of a single invoice.

This is intended to be called after either:

  • A call to the 'List of finalized invoices' endpoint, or
  • Receiving a INVOICE_APPROVED webhook callback

Note that this endpoint will return audit results for any finalized invoice, whether approved or terminated, but will return a 404 for any invoices that are still being audited.

Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>
vendorInvoiceUuid
required
string <uuid>
query Parameters
includeApprovedDocuments
boolean
Default: true

Responses

Response Schema: application/json
object (Invoice.Models.Integrations.InvoiceAuditResultDetailsV2)
Array of objects or null (Invoice.Models.Integrations.InvoiceAuditResultOrderV2)

Additional information about the order/load attached to the invoice

Response samples

Content type
application/json
{
}

Attach documents

This endpoint attaches a document, encoded as a base64 string, to an invoice.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The documents to create.

name
string

The file name to attach to the invoice. It doesn't need to be unique across files attached to the invoice.

type
string
Enum: "Unset" "Unspecified" "Invoice" "DeliveryReceipt" "ProofOfDelivery" "BillOfLading" "NoticeOfAssignment" "RateConfirmation" "WeightAndInspectionCert" "WeightAndInspectionCertificate" "LetterOfAuthority" "LumperReceipt" "PackingList" "GeneratedInvoice" "Email" "InboundEmail" "CommercialInvoice" "CertificateOfOrigin" "CustomerRateConfirmation" "ElectronicInterchangeReceipt" "GatePass" "GateOutInTicket" "InsuranceCertificate" "Reserved19" "OtherReceipt" "W9" "DeliveryOrder" "WeightScaleTicket" "TrailerInterchangeReceipt" "PurchaseOrder" "EscortTicket" "PermitReceipt" "ServiceOrder" "CertificateOfDestruction" "DonationReceipt" "SmartAndFinalStamp" "InboundTripReport" "WeighmasterCertificate" "CargoActivitySheet" "WeberBOL" "TimeCard" "TransferSheet" "TripManifest" "TrailerControlRecord" "TargetTripSheet" "ExitPass" "PortOfArthurBOL" "PortOfArthurBol" "ColdChainCustodyForm" "IGFFreightDispatch" "IgfFreightDispatch" "EquipmentSubmissionForm" "Release" "ACIManifest" "AciManifest" "TrailerPicture" "MaterialSafetyDataSheet" "ShipTicket" "DeliveryTicket" "InvoiceCorrected" "EIRTicket" "PalletReceipt" "HistoricalAuditDocuments" "DetentionReceipt" "Unknown" "Reserved58" "Manifest" "CustomerRateApproval" "LoadCoverSheet" "SafetyChecklist" "WalmartDeliveryConfirmationReport" "StatementInvoice" "TripSheet" "NonFreightInvoice" "FuelReceipt" "ACEManifest" "HazmatForm" "FoodInspection"

The document type.

base64String
string

The document file to attach, encoded in base64.

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Get Invoice Uuid

This endpoint accepts an External Id (Id used in the caller's system) and returns the corresponding UUID.

Every invoice is assigned a UUID with Navix. It can also, depending on its origin, have an External Id, assigned by the tenant or their TMS. This endpoint translates between those two Ids.

Authorizations:
x-api-key
path Parameters
externalId
required
string <uuid>

(Required) The ExternalId of the invoice.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
invoiceUuid
string <uuid>

Response samples

Content type
application/json
{
}

Get Invoice External Id

This endpoint accepts a UUID and returns the corresponding External Id.

Every invoice is assigned a UUID with Navix. It can also, depending on its origin, have an External Id, assigned by the tenant or their TMS. This endpoint translates between those two Ids.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The UUID of the invoice.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
externalId
string

Response samples

Content type
application/json
{
}

Create invoice

This endpoint creates a new invoice. It's designed to be used if you want to create invoices directly from your TMS (or other system), instead of using EDI or email. Note that the invoice is not created immediately; it may take several minutes for the invoice to be fully ingested.

Please note this endpoint is in provisional testing with beta tenants. Please reach out to your implementation manager or customer success contact to discuss the use of this endpoint.

Authorizations:
x-api-key
header Parameters
X-Idempotency-Key
string

(Optional) Provide an X-Idempotency-Key to safely retry the request without accidentally performing the same operation twice.

X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The Invoice to create.

type
string
Default: "Invoice"
Enum: "Invoice" "BalanceDue" "Supplemental"

The invoice type. Defaults to 'Invoice' when empty.

invoiceNumber
required
string [ 0 .. 25 ] characters

The unique identifier for the Invoice

invoiceDate
required
string <date-time> non-empty

The date on which the Invoice was generated. Must be between 1753-01-01 and 9999-12-31.

shipDate
required
string <date-time> non-empty

The date on which the freight was shipped. Must be between 1753-01-01 and 9999-12-31.

deliveryDate
string <date-time>

The date on which the freight was delivered. If provided, must be between 1753-01-01 and 9999-12-31.

Array of objects (invoiceStopRequest)

The list of stops

Array of objects (invoiceItemRequest)

The list of items

required
object

The Tenant's unique identifier for the Vendor. This value should match the value used when creating Orders programatically.

currency
string
Default: "USD"
Enum: "USD" "CAD" "MXN"

The three character ISO 4217 code for the Invoice currency. Defaults to 'USD' when empty

chargeTerms
string
Enum: "Collect" "Prepaid" "PrepaidAdd" "ThirdParty"

The freight payment terms

paymentTerms
string
Enum: "Net0" "Net1" "Net2" "Net3" "Net4" "Net5" "Net6" "Net7" "Net8" "Net9" "Net10" "Net11" "Net12" "Net13" "Net14" "Net15" "Net16" "Net17" "Net18" "Net19" "Net20" "Net21" "Net22" "Net23" "Net24" "Net25" "Net26" "Net27" "Net28" "Net29" "Net30" "Net31" "Net32" "Net33" "Net34" "Net35" "Net36" "Net37" "Net38" "Net39" "Net40" "Net41" "Net42" "Net43" "Net44" "Net45" "Net46" "Net47" "Net48" "Net49" "Net50" "Net51" "Net52" "Net53" "Net54" "Net55" "Net56" "Net57" "Net58" "Net59" "Net60" "Net61" "Net62" "Net63" "Net64" "Net65" "Net66" "Net67" "Net68" "Net69" "Net70" "Net71" "Net72" "Net73" "Net74" "Net75" "Net76" "Net77" "Net78" "Net79" "Net80" "Net81" "Net82" "Net83" "Net84" "Net85" "Net86" "Net87" "Net88" "Net89" "Net90" "Net91" "Net92" "Net93" "Net94" "Net95" "Net96" "Net97" "Net98" "Net99" "Net100" "Net101" "Net102" "Net103" "Net104" "Net105" "Net106" "Net107" "Net108" "Net109" "Net110" "Net111" "Net112" "Net113" "Net114" "Net115" "Net116" "Net117" "Net118" "Net119" "Net120" "Net121" "Net122" "Net123" "Net124" "Net125" "Net126" "Net127" "Net128" "Net129" "Net130" "Net131" "Net132" "Net133" "Net134" "Net135" "Net136" "Net137" "Net138" "Net139" "Net140" "Net141" "Net142" "Net143" "Net144" "Net145" "Net146" "Net147" "Net148" "Net149" "Net150" "Net151" "Net152" "Net153" "Net154" "Net155" "Net156" "Net157" "Net158" "Net159" "Net160" "Net161" "Net162" "Net163" "Net164" "Net165" "Net166" "Net167" "Net168" "Net169" "Net170" "Net171" "Net172" "Net173" "Net174" "Net175" "Net176" "Net177" "Net178" "Net179" "Net180" "Net181" "Net182" "Net183" "Net184" "Net185" "Net186" "Net187" "Net188" "Net189" "Net190" "Net191" "Net192" "Net193" "Net194" "Net195" "Net196" "Net197" "Net198" "Net199" "Net200" "Net201" "Net202" "Net203" "Net204" "Net205" "Net206" "Net207" "Net208" "Net209" "Net210" "Net211" "Net212" "Net213" "Net214" "Net215" "Net216" "Net217" "Net218" "Net219" "Net220" "Net221" "Net222" "Net223" "Net224" "Net225" "Net226" "Net227" "Net228" "Net229" "Net230" "Net231" "Net232" "Net233" "Net234" "Net235" "Net236" "Net237" "Net238" "Net239" "Net240" "Net241" "Net242" "Net243" "Net244" "Net245" "Net246" "Net247" "Net248" "Net249" "Net250" "Net251" "Net252" "Net253" "Net254" "Net255" "Net256" "Net257" "Net258" "Net259" "Net260" "Net261" "Net262" "Net263" "Net264" "Net265" "Net266" "Net267" "Net268" "Net269" "Net270" "Net271" "Net272" "Net273" "Net274" "Net275" "Net276" "Net277" "Net278" "Net279" "Net280" "Net281" "Net282" "Net283" "Net284" "Net285" "Net286" "Net287" "Net288" "Net289" "Net290" "Net291" "Net292" "Net293" "Net294" "Net295" "Net296" "Net297" "Net298" "Net299" "Net300" "Net301" "Net302" "Net303" "Net304" "Net305" "Net306" "Net307" "Net308" "Net309" "Net310" "Net311" "Net312" "Net313" "Net314" "Net315" "Net316" "Net317" "Net318" "Net319" "Net320" "Net321" "Net322" "Net323" "Net324" "Net325" "Net326" "Net327" "Net328" "Net329" "Net330" "Net331" "Net332" "Net333" "Net334" "Net335" "Net336" "Net337" "Net338" "Net339" "Net340" "Net341" "Net342" "Net343" "Net344" "Net345" "Net346" "Net347" "Net348" "Net349" "Net350" "Net351" "Net352" "Net353" "Net354" "Net355" "Net356" "Net357" "Net358" "Net359" "Net360" "Net361" "Net362" "Net363" "Net364" "Net365" "Prepaid"

The invoice payment terms

object

The invoice service information

Array of objects (invoiceChargeRequest) non-empty

The list of charges

object

If applicable, tenants can send in the associated Customer on an Invoice. This externalId will not be validated and if the Customer is not found in Navix we will show in UI as no customer selected

Array of objects (invoiceReferenceNumberRequest)

An optional list of reference numbers

externalId
string or null [ 0 .. 255 ] characters
Default: "InvoiceNumber"

The external id of the invoice. If not provided will default to the invoice number provided

isQuickPay
boolean

Indicates whether the invoice is a Quick Pay invoice. Defaults to false when not specified. When true, the invoice due date will be set to match the invoice creation date.

Responses

Response Schema: text/plain
externalId
string

The external identifier for the Invoice

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Get invoice

This returns an invoice. Unlike the 'Get Audit Results' endpoint, this can be used to return an invoice that's in any state, including one that hasn't been approved or terminated.

This endpoint takes a UUID. If you know the invoice's External Id, but not it's UUID, use the 'Get Invoice Uuid' endpoint first to translate the External Id to a UUID.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The invoice UUID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
uuid
string <uuid>
type
string
invoiceNumber
string
invoiceDate
string or null <date-time>
shipDate
string or null <date-time>
deliveryDate
string or null <date-time>
object (vendorInvoiceStatePublicDto)
Array of objects (vendorInvoiceStopPublicDto)
Array of objects (vendorInvoiceItemPublicDto)
object (vendorInvoiceVendorPublicDto)
currency
string
chargeTerms
string
object (vendorInvoiceServicePublicDto)
object (vendorInvoiceCustomerPublicDto)
Array of objects (vendorInvoiceReferenceNumberPublicDto)
Array of objects (vendorInvoiceDocumentUuidsPublicDto)
object
receivedDate
string or null <date-time>
object (vendorInvoiceOrderPublicDto)

Response samples

Content type
application/json
{
}

Get invoice document

Gets the invoice PDF document. This will return the raw PDF file. There will be a Content-Disposition header that includes the name of the document.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The invoice UUID.

documentUuid
required
string <uuid>

(Required) The document UUID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/octet-stream
string <binary>

Response samples

Content type
application/json
{
}

Get invoice exceptions

This returns the exceptions and work instructions currently open on an invoice.

Resolved items are not returned, so an item that is no longer present has been resolved.

Only exceptions raised by Flex rules are returned, along with internal Navix errors.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string <uuid>

(Required) The invoice UUID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
Array of objects (invoiceExceptionItemPublicDto)

The exceptions currently open on the invoice. An exception that is no longer present has been resolved.

Array of objects (invoiceWorkInstructionItemPublicDto)

The work instructions currently open on the invoice. Attesting a work instruction does not resolve it, so an attested work instruction still appears here.

Response samples

Content type
application/json
{
}

Orders

Create an order

This upserts an order.

This can be used to create and update an order. The externalId is the unique identifier (and defaults to orderNumber if not provided or blank). So to update an order, you'd call this endpoint with the same externalId you used when creating the order.

The endpoint validates the order, and returns a 400 if there's any invalid data being passed. A 202 response indicates the message has been durably stored and entered a highly-resilient workflow, and API consumers can assume the order will be successfully ingested.

Authorizations:
x-api-key
header Parameters
X-Idempotency-Key
string

(Optional) Provide an X-Idempotency-Key to safely retry the request without accidentally performing the same operation twice.

X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The Order to create or update.

orderNumber
required
string [ 0 .. 128 ] characters

The unique identifier for the Order

externalId
string [ 0 .. 255 ] characters
Default: "OrderNumber"

The external id of the order. If not provided will default to the order number provided

shipDate
required
string <date-time> non-empty

The date on which the freight was shipped. Date Only

deliveryDate
string or null <date-time>

The date on which the freight was delivered. Date Only

Array of objects or null (orderStopRequest)

The list of Stops

Array of objects or null (orderItemRequest)

The list of Items

required
Array of objects (orderVendorRequest)

The list of Vendors. At least one is required. If multiple are provided, each externalId must appear only once.

required
object

The Order Customer

Array of objects or null (orderReferenceNumberRequest)

An optional list of Reference Numbers

object or null

Optional Order metadata, expressed as a key-value pair of key-value pairs. Note that this does not accept arbitrary JSON data, and does not support arrays. Top-level keys cannot have literal values, their children must be objects. For instance, the following is valid:

"metadata": {
  "parentKey1": {
    "key1": "value1",
    "key2": "value2",
  },
  "parentKey2": {
    "keyA": "valueA",
    "keyB": "valueB",
  }
}

You can use any valid JSON name for the key names on both parent and child objects, except for the navix_ prefix, which is reserved.

object or null

The Order Tags

Array of objects or null (orderInternalContactRequest)

An optional list of internal contacts

Responses

Response Schema: application/json
externalId
string

The external identifier for the Order

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Get invoice Uuids

Returns the Uuids of all the invoices matched to an order, based on the order's External Id.

Authorizations:
x-api-key
path Parameters
orderExternalId
required
string

(Required) The order ID used in a tenant's system. This is the externalId in the Order shape.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: text/json
Array
uuid
string <uuid>

Response samples

Content type
text/json
[
]

Payments

Submit payment for invoice

This endpoint submits a payment for an existing invoice. The payment is processed asynchronously. Duplicate payments (same invoice + payment reference) will be rejected with a 409 Conflict.

Authorizations:
x-api-key
path Parameters
invoiceUuid
required
string

(Required) The UUID of the invoice to apply the payment to.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The payment details.

amountPaid
required
number <double>

The amount paid. Can be negative for credits or adjustments.

paymentDate
required
string <date-time> non-empty

The date on which the payment was made.

paymentReference
required
string [ 1 .. 100 ] characters

A unique reference for this payment (e.g., check number, ACH reference). Required for duplicate prevention. Max 100 characters.

Responses

Response Schema: application/json
invoiceUuid
string

The UUID of the invoice to which the payment was applied.

accepted
boolean

Indicates whether the payment request was accepted for processing.

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Pre-bill

Get Document Metadata By Uuid

Get a document. Note: the 'fields' property is highly variable and subject to change based on document transcription.

Authorizations:
x-api-key
path Parameters
documentUuid
required
string <uuid>

(Required) The UUID of the document.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: text/json
uuid
string <uuid>
orderExternalId
string
type
string
Default: "Unset"
Enum: "Unset" "Unspecified" "Invoice" "DeliveryReceipt" "ProofOfDelivery" "BillOfLading" "NoticeOfAssignment" "RateConfirmation" "WeightAndInspectionCert" "WeightAndInspectionCertificate" "LetterOfAuthority" "LumperReceipt" "PackingList" "GeneratedInvoice" "Email" "InboundEmail" "CommercialInvoice" "CertificateOfOrigin" "CustomerRateConfirmation" "ElectronicInterchangeReceipt" "GatePass" "GateOutInTicket" "InsuranceCertificate" "Reserved19" "OtherReceipt" "W9" "DeliveryOrder" "WeightScaleTicket" "TrailerInterchangeReceipt" "PurchaseOrder" "EscortTicket" "PermitReceipt" "ServiceOrder" "CertificateOfDestruction" "DonationReceipt" "SmartAndFinalStamp" "InboundTripReport" "WeighmasterCertificate" "CargoActivitySheet" "WeberBOL" "TimeCard" "TransferSheet" "TripManifest" "TrailerControlRecord" "TargetTripSheet" "ExitPass" "PortOfArthurBOL" "PortOfArthurBol" "ColdChainCustodyForm" "IGFFreightDispatch" "IgfFreightDispatch" "EquipmentSubmissionForm" "Release" "ACIManifest" "AciManifest" "TrailerPicture" "MaterialSafetyDataSheet" "ShipTicket" "DeliveryTicket" "InvoiceCorrected" "EIRTicket" "PalletReceipt" "HistoricalAuditDocuments" "DetentionReceipt" "Unknown" "Reserved58" "Manifest" "CustomerRateApproval" "LoadCoverSheet" "SafetyChecklist" "WalmartDeliveryConfirmationReport" "StatementInvoice" "TripSheet" "NonFreightInvoice" "FuelReceipt" "ACEManifest" "HazmatForm" "FoodInspection"
status
string
Default: "Draft"
Enum: "Draft" "Ready" "Approved"
hasSignature
boolean
approvedAt
string or null <date-time>
approvedBy
string
filename
string
orderStopSequence
integer or null <int32>

Response samples

Content type
text/json
{
}

Get one attachment

This returns a single file binary for the given document.

Authorizations:
x-api-key
path Parameters
documentUuid
required
string <uuid>

(Required) The UUID of the document.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Headers
Content-Disposition
string

Specifies the presentation and file type of the response content.

Content-Type
string

Specifies the MIME type of the response content.

Response Schema: application/octet-stream
string <binary>

Get document Uuids

Returns the Uuids of all the documents matched to an order, based on the order's uuid.

Authorizations:
x-api-key
path Parameters
orderExternalId
required
string

(Required) The Order External Id of the Order.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: text/json
Array
uuid
string <uuid>

Response samples

Content type
text/json
[
]

Get Document Metadata By OrderExternalId

Returns the metadata of all the documents matched to an order, based on the order's orderExternalId.

Authorizations:
x-api-key
path Parameters
orderExternalId
required
string

(Required) The Order External Id of the Order.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: text/json
Array
uuid
string <uuid>
orderExternalId
string
type
string
Default: "Unset"
Enum: "Unset" "Unspecified" "Invoice" "DeliveryReceipt" "ProofOfDelivery" "BillOfLading" "NoticeOfAssignment" "RateConfirmation" "WeightAndInspectionCert" "WeightAndInspectionCertificate" "LetterOfAuthority" "LumperReceipt" "PackingList" "GeneratedInvoice" "Email" "InboundEmail" "CommercialInvoice" "CertificateOfOrigin" "CustomerRateConfirmation" "ElectronicInterchangeReceipt" "GatePass" "GateOutInTicket" "InsuranceCertificate" "Reserved19" "OtherReceipt" "W9" "DeliveryOrder" "WeightScaleTicket" "TrailerInterchangeReceipt" "PurchaseOrder" "EscortTicket" "PermitReceipt" "ServiceOrder" "CertificateOfDestruction" "DonationReceipt" "SmartAndFinalStamp" "InboundTripReport" "WeighmasterCertificate" "CargoActivitySheet" "WeberBOL" "TimeCard" "TransferSheet" "TripManifest" "TrailerControlRecord" "TargetTripSheet" "ExitPass" "PortOfArthurBOL" "PortOfArthurBol" "ColdChainCustodyForm" "IGFFreightDispatch" "IgfFreightDispatch" "EquipmentSubmissionForm" "Release" "ACIManifest" "AciManifest" "TrailerPicture" "MaterialSafetyDataSheet" "ShipTicket" "DeliveryTicket" "InvoiceCorrected" "EIRTicket" "PalletReceipt" "HistoricalAuditDocuments" "DetentionReceipt" "Unknown" "Reserved58" "Manifest" "CustomerRateApproval" "LoadCoverSheet" "SafetyChecklist" "WalmartDeliveryConfirmationReport" "StatementInvoice" "TripSheet" "NonFreightInvoice" "FuelReceipt" "ACEManifest" "HazmatForm" "FoodInspection"
status
string
Default: "Draft"
Enum: "Draft" "Ready" "Approved"
hasSignature
boolean
approvedAt
string or null <date-time>
approvedBy
string
filename
string
orderStopSequence
integer or null <int32>

Response samples

Content type
text/json
[
]

Get List of Approved Documents

Returns a list of approved documents within the specified time interval

Authorizations:
x-api-key
header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The search parameters.

startTime
required
string <date-time> non-empty
endTime
string or null <date-time>
pageSize
integer <int32>
pageNumber
integer <int32>

Responses

Response Schema: text/json
Array
documentUuid
string <uuid>
orderExternalId
string

Request samples

Content type
application/json
{
}

Response samples

Content type
text/json
[
]

Vendors

Get a vendor

Retrieves a vendor by its external ID (the ID used in your system / TMS).

Authorizations:
x-api-key
path Parameters
externalId
required
string

(Required) The vendor's external ID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Responses

Response Schema: application/json
externalId
string

An ID used by the API consumer's system, such as the ID in the TMS.

name
string or null

The name of the vendor.

scacCode
string or null

Vendor SCAC code.

mcNumber
string or null

Vendor MC number.

dotNumber
string or null

Vendor DOT number.

currency
string or null
Enum: "USD" "CAD" "MXN"

The vendor's currency. Core accepts USD, CAD and MXN.

billingTerms
string or null
Enum: "Net0" "Net1" "Net2" "Net3" "Net4" "Net5" "Net6" "Net7" "Net8" "Net9" "Net10" "Net11" "Net12" "Net13" "Net14" "Net15" "Net16" "Net17" "Net18" "Net19" "Net20" "Net21" "Net22" "Net23" "Net24" "Net25" "Net26" "Net27" "Net28" "Net29" "Net30" "Net31" "Net32" "Net33" "Net34" "Net35" "Net36" "Net37" "Net38" "Net39" "Net40" "Net41" "Net42" "Net43" "Net44" "Net45" "Net46" "Net47" "Net48" "Net49" "Net50" "Net51" "Net52" "Net53" "Net54" "Net55" "Net56" "Net57" "Net58" "Net59" "Net60" "Net61" "Net62" "Net63" "Net64" "Net65" "Net66" "Net67" "Net68" "Net69" "Net70" "Net71" "Net72" "Net73" "Net74" "Net75" "Net76" "Net77" "Net78" "Net79" "Net80" "Net81" "Net82" "Net83" "Net84" "Net85" "Net86" "Net87" "Net88" "Net89" "Net90" "Net91" "Net92" "Net93" "Net94" "Net95" "Net96" "Net97" "Net98" "Net99" "Net100" "Net101" "Net102" "Net103" "Net104" "Net105" "Net106" "Net107" "Net108" "Net109" "Net110" "Net111" "Net112" "Net113" "Net114" "Net115" "Net116" "Net117" "Net118" "Net119" "Net120" "Net121" "Net122" "Net123" "Net124" "Net125" "Net126" "Net127" "Net128" "Net129" "Net130" "Net131" "Net132" "Net133" "Net134" "Net135" "Net136" "Net137" "Net138" "Net139" "Net140" "Net141" "Net142" "Net143" "Net144" "Net145" "Net146" "Net147" "Net148" "Net149" "Net150" "Net151" "Net152" "Net153" "Net154" "Net155" "Net156" "Net157" "Net158" "Net159" "Net160" "Net161" "Net162" "Net163" "Net164" "Net165" "Net166" "Net167" "Net168" "Net169" "Net170" "Net171" "Net172" "Net173" "Net174" "Net175" "Net176" "Net177" "Net178" "Net179" "Net180" "Net181" "Net182" "Net183" "Net184" "Net185" "Net186" "Net187" "Net188" "Net189" "Net190" "Net191" "Net192" "Net193" "Net194" "Net195" "Net196" "Net197" "Net198" "Net199" "Net200" "Net201" "Net202" "Net203" "Net204" "Net205" "Net206" "Net207" "Net208" "Net209" "Net210" "Net211" "Net212" "Net213" "Net214" "Net215" "Net216" "Net217" "Net218" "Net219" "Net220" "Net221" "Net222" "Net223" "Net224" "Net225" "Net226" "Net227" "Net228" "Net229" "Net230" "Net231" "Net232" "Net233" "Net234" "Net235" "Net236" "Net237" "Net238" "Net239" "Net240" "Net241" "Net242" "Net243" "Net244" "Net245" "Net246" "Net247" "Net248" "Net249" "Net250" "Net251" "Net252" "Net253" "Net254" "Net255" "Net256" "Net257" "Net258" "Net259" "Net260" "Net261" "Net262" "Net263" "Net264" "Net265" "Net266" "Net267" "Net268" "Net269" "Net270" "Net271" "Net272" "Net273" "Net274" "Net275" "Net276" "Net277" "Net278" "Net279" "Net280" "Net281" "Net282" "Net283" "Net284" "Net285" "Net286" "Net287" "Net288" "Net289" "Net290" "Net291" "Net292" "Net293" "Net294" "Net295" "Net296" "Net297" "Net298" "Net299" "Net300" "Net301" "Net302" "Net303" "Net304" "Net305" "Net306" "Net307" "Net308" "Net309" "Net310" "Net311" "Net312" "Net313" "Net314" "Net315" "Net316" "Net317" "Net318" "Net319" "Net320" "Net321" "Net322" "Net323" "Net324" "Net325" "Net326" "Net327" "Net328" "Net329" "Net330" "Net331" "Net332" "Net333" "Net334" "Net335" "Net336" "Net337" "Net338" "Net339" "Net340" "Net341" "Net342" "Net343" "Net344" "Net345" "Net346" "Net347" "Net348" "Net349" "Net350" "Net351" "Net352" "Net353" "Net354" "Net355" "Net356" "Net357" "Net358" "Net359" "Net360" "Net361" "Net362" "Net363" "Net364" "Net365" "Prepaid"

The billing/payment term for the vendor (e.g. 'Net30').

object or null

Tenant-managed metadata, keyed group => key => value.

Array of objects (vendorContactResponse)

Every contact Navix holds for the vendor. Always present — an empty array when the vendor has no contacts.

Array of objects (vendorAddressResponse)

Every address Navix holds for the vendor. Always present — an empty array when the vendor has no addresses.

Response samples

Content type
application/json
{
}

Create or update a vendor

Upserts a vendor based on its external ID — creates it if new, updates it if it already exists. Warning: metadata is fully replaced on each PUT; if metadata is omitted, any existing metadata is cleared. Use PATCH /v2/vendors/{externalId}/metadata for selective updates. The contacts and addresses collections are also replaced in full, but follow a different omitted-versus-empty rule: a collection that is sent is the complete set and replaces everything Navix holds, an empty array clears the collection, and a collection that is omitted (or sent as null) leaves the existing children untouched.

Authorizations:
x-api-key
header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The vendor to create or update.

externalId
required
string [ 0 .. 450 ] characters

(Required) An ID used by the API consumer's system, such as the ID in the TMS.

name
required
string [ 0 .. 255 ] characters

(Required) The name of the vendor.

currency
string or null
Enum: "USD" "CAD" "MXN"

The vendor's currency, one of USD, CAD or MXN. Defaults to USD when omitted.

billingTerms
string or null
Enum: "Net0" "Net1" "Net2" "Net3" "Net4" "Net5" "Net6" "Net7" "Net8" "Net9" "Net10" "Net11" "Net12" "Net13" "Net14" "Net15" "Net16" "Net17" "Net18" "Net19" "Net20" "Net21" "Net22" "Net23" "Net24" "Net25" "Net26" "Net27" "Net28" "Net29" "Net30" "Net31" "Net32" "Net33" "Net34" "Net35" "Net36" "Net37" "Net38" "Net39" "Net40" "Net41" "Net42" "Net43" "Net44" "Net45" "Net46" "Net47" "Net48" "Net49" "Net50" "Net51" "Net52" "Net53" "Net54" "Net55" "Net56" "Net57" "Net58" "Net59" "Net60" "Net61" "Net62" "Net63" "Net64" "Net65" "Net66" "Net67" "Net68" "Net69" "Net70" "Net71" "Net72" "Net73" "Net74" "Net75" "Net76" "Net77" "Net78" "Net79" "Net80" "Net81" "Net82" "Net83" "Net84" "Net85" "Net86" "Net87" "Net88" "Net89" "Net90" "Net91" "Net92" "Net93" "Net94" "Net95" "Net96" "Net97" "Net98" "Net99" "Net100" "Net101" "Net102" "Net103" "Net104" "Net105" "Net106" "Net107" "Net108" "Net109" "Net110" "Net111" "Net112" "Net113" "Net114" "Net115" "Net116" "Net117" "Net118" "Net119" "Net120" "Net121" "Net122" "Net123" "Net124" "Net125" "Net126" "Net127" "Net128" "Net129" "Net130" "Net131" "Net132" "Net133" "Net134" "Net135" "Net136" "Net137" "Net138" "Net139" "Net140" "Net141" "Net142" "Net143" "Net144" "Net145" "Net146" "Net147" "Net148" "Net149" "Net150" "Net151" "Net152" "Net153" "Net154" "Net155" "Net156" "Net157" "Net158" "Net159" "Net160" "Net161" "Net162" "Net163" "Net164" "Net165" "Net166" "Net167" "Net168" "Net169" "Net170" "Net171" "Net172" "Net173" "Net174" "Net175" "Net176" "Net177" "Net178" "Net179" "Net180" "Net181" "Net182" "Net183" "Net184" "Net185" "Net186" "Net187" "Net188" "Net189" "Net190" "Net191" "Net192" "Net193" "Net194" "Net195" "Net196" "Net197" "Net198" "Net199" "Net200" "Net201" "Net202" "Net203" "Net204" "Net205" "Net206" "Net207" "Net208" "Net209" "Net210" "Net211" "Net212" "Net213" "Net214" "Net215" "Net216" "Net217" "Net218" "Net219" "Net220" "Net221" "Net222" "Net223" "Net224" "Net225" "Net226" "Net227" "Net228" "Net229" "Net230" "Net231" "Net232" "Net233" "Net234" "Net235" "Net236" "Net237" "Net238" "Net239" "Net240" "Net241" "Net242" "Net243" "Net244" "Net245" "Net246" "Net247" "Net248" "Net249" "Net250" "Net251" "Net252" "Net253" "Net254" "Net255" "Net256" "Net257" "Net258" "Net259" "Net260" "Net261" "Net262" "Net263" "Net264" "Net265" "Net266" "Net267" "Net268" "Net269" "Net270" "Net271" "Net272" "Net273" "Net274" "Net275" "Net276" "Net277" "Net278" "Net279" "Net280" "Net281" "Net282" "Net283" "Net284" "Net285" "Net286" "Net287" "Net288" "Net289" "Net290" "Net291" "Net292" "Net293" "Net294" "Net295" "Net296" "Net297" "Net298" "Net299" "Net300" "Net301" "Net302" "Net303" "Net304" "Net305" "Net306" "Net307" "Net308" "Net309" "Net310" "Net311" "Net312" "Net313" "Net314" "Net315" "Net316" "Net317" "Net318" "Net319" "Net320" "Net321" "Net322" "Net323" "Net324" "Net325" "Net326" "Net327" "Net328" "Net329" "Net330" "Net331" "Net332" "Net333" "Net334" "Net335" "Net336" "Net337" "Net338" "Net339" "Net340" "Net341" "Net342" "Net343" "Net344" "Net345" "Net346" "Net347" "Net348" "Net349" "Net350" "Net351" "Net352" "Net353" "Net354" "Net355" "Net356" "Net357" "Net358" "Net359" "Net360" "Net361" "Net362" "Net363" "Net364" "Net365" "Prepaid"

Billing/payment term (e.g. 'Net30'). Defaults to 'Net30'. Possible values are Net0-Net365 and Prepaid.

scacCode
string or null

Vendor SCAC code. Replaced on each PUT; omit or send null to clear it.

mcNumber
string or null

Vendor MC number.

dotNumber
string or null

Vendor DOT number.

object or null

Tenant-managed metadata, keyed group => key => value. On a PUT this fully replaces the vendor's stored metadata — use PATCH /v2/vendors/{externalId}/metadata for selective updates.

Array of objects or null (vendorContactRequest) <= 100 items

The complete set of contacts. Replaces every contact Navix holds; an empty array clears them, and omitting the field leaves them untouched. At most 100 per request.

Array of objects or null (vendorAddressRequest) <= 100 items

The complete set of addresses. Replaces every address Navix holds; an empty array clears them, and omitting the field leaves them untouched. At most 100 per request.

Responses

Request samples

Content type
application/json
{
}

Update a vendor's metadata

Selectively updates a vendor's metadata. Each top-level group in the body replaces that group; a group sent as null is removed; groups not included are left unchanged.

Authorizations:
x-api-key
path Parameters
externalId
required
string

(Required) The vendor's external ID.

header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

Partial metadata to merge (group => key => value). Send a group as null to delete it.

additional property
object (dictionary_string)

Responses

Response Schema: application/json
additional property
object (dictionary_string)

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
{
}

Orders

Get List of Approved Orders

Returns a list of OrderExternalIds within the specified time interval

Authorizations:
x-api-key
header Parameters
X-Tenant-Uuid
required
string

(Required) Your tenant UUID.

Request Body schema: application/json
required

(Required) The search parameters.

startTime
required
string <date-time> non-empty
endTime
string or null <date-time>
pageSize
integer <int32>
pageNumber
integer <int32>

Responses

Response Schema: text/json
Array
orderExternalId
string

Request samples

Content type
application/json
{
}

Response samples

Content type
text/json
[
]

Documents

Download invoice document

Returns the raw binary file of a document associated with an invoice. The Content-Type header will contain the MIME type of the file, such as application/pdf. The Content-Disposition header will contain the original name of the file (such as the filename in the email that was sent to Navix).

This is intended to be used after a call to the "Get Audit Result" endpoint. The UUIDs for documents can be found in the returned payload from "Get Audit Results", under orders.documents.

Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>

The UUID of the tenant who owns the vendor invoices

vendorInvoiceUuid
required
string <uuid>

The UUID of the vendor invoice who owns the document

documentUuid
required
string <uuid>

The UUID of the vendor invoice document

Responses

Response Schema: application/json
string <binary>

Response samples

Content type
application/json
"string"

Invoices

Get audit result Deprecated

Get the results of an audit of a single invoice. This endpoint has been deprecated. A newer version is listed under 'API V2'.

Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>
vendorInvoiceUuid
required
string <uuid>

Responses

Response Schema: application/json
object (Invoice.Models.Integrations.InvoiceAuditResultDetails)
Array of objects or null (Invoice.Models.Integrations.InvoiceAuditResultOrder)

Response samples

Content type
application/json
{
}

List finalized invoices

Retrieves a paginated list containing the unique identifier (UUID) of each of the vendor invoices finalized between the specified StartTime and EndTime. This endpoint is intended to be polled on a regular basis.

Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>

The UUID of the tenant who owns the finalized Vendor Invoices

query Parameters
StartTime
required
string <date-time>

Start time range to find Vendor Invoices which have finalized after this start time. This start time is exclusive. Start time time zone is interpreted as UTC.

EndTime
string <date-time>

End time range to find Vendor Invoices which have finalized before this start time. This start time is inclusive. Default: Present time. End time time zone is interpreted as UTC.

SortOrder
string

Sort order applied to the finalization time. Values: ASC, DESC. Default value is DESC

PageSize
integer <int32>

Number of records per page. Default value is 20, maximum value is 100

PageNumber
integer <int32>

Page index of the records to return. First page and default value is 0

IncludeUnmatched
boolean

Flag to include invoices that haven't been matched to any orders. This parameter should only be used for tenants that are using or expecting orderless invoices. Default value is false.

Responses

Response Schema: application/json
currentPage
integer <int32>
totalPages
integer <int32>
pageSize
integer <int32>
totalRecords
integer <int32>
Array of objects or null (Invoice.Models.Responses.FinalizedInvoiceResponse)

Response samples

Content type
application/json
{
}

Terminate an invoice

This endpoint terminates an invoice. Once an invoice is terminated, it can no longer be audited or approved.

Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>

The UUID of the tenant who owns the Vendor Invoices

invoiceUuid
required
string <uuid>

The UUID of the Vendor Invoice

version
required
string

Responses

Response samples

Content type
application/json
{
}

Orders

Create a new order Deprecated

This endpoint is deprecated. Use the "Create an Order" endpoint listed under "API V2" instead.

This endpoint will always create a new composite order - it is not idempotent. If an existing Order with the same Order Number is found, it will be replaced with the new one. In the case the existing order is matched to an invoice, it will also be replaced, given that the invoice has not been approved yet.

The enableValidations property on the request body is used to determine whether or not to perform validations on the order. If validations are performed, any bad data will result in an error being returned; if validation are disabled, just about any data will be accepted. The validated fields include:

  • Transportation Mode
  • Transportation Service Level
  • Transportation Service Type
  • Currency
  • Billing Term
  • Customer
  • Vendor
  • Reference Number Type
  • Handling Unit
  • Charge Type
Authorizations:
x-api-key
path Parameters
tenantUuid
required
string <uuid>

The UUID of the tenant who owns the composite order

Request Body schema: application/json
orderNumber
string or null

The unique identifier for the Order (i.e, "Load Number", "Shipment Number"). This value should be the commonly known identifier for the order that is shared with Vendors (i.e., "Carrier").

transportationMode
string or null

The mode for the order. This field is required if validations are enabled. Possible values are:

  • Ground
  • Air
  • Non-Freight
  • Ocean
  • Rail
transportationServiceLevel
string or null

The service level for the order. This field is required if validations are enabled. Possible values are:

  • Standard
  • Next Day AM
  • Next Day PM
  • 2nd Day
  • Deferred
  • 3-5 Day
  • International
  • Next Day
  • Volume
  • Conestoga
  • Consolidation
  • Flatbed
  • Temperature Controlled
  • 4PL
  • Priority
  • Economy
  • Guaranteed
  • Guaranteed Exclusive
  • TCSW
  • TCSP
  • Power Only
  • Drop Trailer
  • Dump Trailer
  • Guaranteed 5PM
  • Guaranteed 12PM
  • Guaranteed 330PM
  • Pilot Car
  • Installation
transportationServiceType
string or null

The service type for the order. Possible values if validations are enabled or it can be undefined:

  • LTL
  • TL
  • Parcel
  • Expedited
  • Air
  • Cartage
  • Drayage
  • Guaranteed
  • Intermodal
  • Warehouse
  • 4PL
  • Ocean
  • Rail
  • Service
currency
string or null

The currency for the order. Defaults to USD. Possible values are:

  • USD
  • CAD
freightChargeTerms
string or null

The freight charge terms for the order. This field is required if validations are enabled. Possible values are:

  • Collect
  • Prepaid
  • Prepaid & Add
  • Third Party
plannedShipmentWeight
number or null <double>
actualShipmentWeight
number or null <double>
cubicMeter
number or null <double>
shipDate
string or null <date-time>
deliveredDate
string or null <date-time>
deliverTime
string or null
customerCharge
number or null <double>
billingTerm
string or null

The billing term for the order. This field is required if validations are enabled. Possible values are:

  • Net 0
  • Net 1
  • Net 2
  • Net 5
  • Net 7
  • Net 10
  • Net 14
  • Net 15
  • Net 20
  • Net 21
  • Net 24
  • Net 25
  • Net 27
  • Net 28
  • Net 29
  • Net 30
  • Net 31
  • Net 32
  • Net 33
  • Net 35
  • Net 40
  • Net 45
  • Net 47
  • Net 50
  • Net 55
  • Net 60
  • Net 65
  • Net 67
  • Net 75
  • Net 90
  • Net 99
  • Net 120
  • Prepaid
paymentTerms
string or null
distance
number or null <double>
metadata
string or null
ratingEngineInfo
string or null

Rating Engine information used by the Navix Rating Engine Integration. This field is optional and should be a list of key value pairs as json. Here are some predefined pairs:
{
"VendorAccountUserName": "value",
"VendorAccountPassword": "value",
"ContractID": "value",
"ContractName": "value",
"ServiceType": "value"
}

uuid
string or null <uuid>
enableValidations
boolean

If set to true, the order will be validated before being created, and an error will be returned if any validations fail.

object (Vendor.Models.Requests.Integrations.VendorRequest)
object (Customer.Api.Models.Requests.Integrations.CustomerRequest)
division
string or null

A tenant's arbitrary way to segment the order amongst multiple orders. Ex. values could be names of different departments at the tenant, or names of different teams

Array of objects or null (Order.Models.Integrations.OrderCompositeStopRequest)
Array of objects or null (Order.Models.Integrations.OrderCompositeReferenceNumberRequest)
Array of objects or null (Order.Models.Integrations.OrderCompositeLineItemRequest)
Array of objects or null (Order.Models.Integrations.OrderCompositeChargeRequest)
Deprecated

Deprecated. Replaced by VendorCharges

Array of objects or null (Order.Models.Integrations.OrderCompositeChargeRequest)
Array of objects or null (Order.Models.Integrations.OrderCompositeChargeRequest)

Responses

Request samples

Content type
application/json
{
}

Response samples

Content type
application/json
"string"