# Supplier Promise Schedule Revision Evidence (`h_murdock/supplier-promise-schedule-evidence`) Actor

Review explicitly selected supplier promise revisions and split delivery lots. Exact quantity balances, late/undated active promises, cancellations, superseded lots and ambiguous keys. JSON or mapped CSV; no supplier credentials or ERP writes.

- **URL**: https://apify.com/h_murdock/supplier-promise-schedule-evidence.md
- **Developed by:** [Gilad Ronen](https://apify.com/h_murdock) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.25 / completed report

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does this Actor do?

Supplier Promise Schedule Revision Evidence turns an authorized order export and supplier promise-lot export into a reproducible **selected revision report**. It shows which split lots contribute to a declared schedule, which older lots are retained uncounted, and where quantity, date or identity evidence needs review.

Use it after a supplier revises a delivery schedule or before handing a split-delivery promise to another operations team. You explicitly identify the revision you want reviewed for each supplier and purchase order. Revision labels are opaque strings: the Actor never chooses a “latest” revision from alphabetical order, timestamps or row order.

### Why use a revision and split-lot report?

A line can have several valid delivery promises with distinct promise IDs. Mixing an older schedule into those lots can inflate the apparent quantity. This Actor keeps the complete supplied evidence while calculating per-line quantities only for your selected revision. It separates confirmed, backordered and cancelled declarations, and divides active promises into on-time, late and undated quantities relative to the required date.

This is a batch tool available through the Apify API and integrations. It does not connect to suppliers or update your purchasing system. Connected ERP users may already have this workflow; it is useful when you have normalized exports that need an explicit, reviewable schedule artifact.

### How to review a supplier promise schedule

1. Export authorized order lines and normalized promise lots. Preserve supplier, PO, line, SKU, unit, revision and promise identifiers as strings, including leading zeros.
2. Supply `orderLines` and `promiseLots` arrays, or use the mapped CSV alternative for either table. Delete the relevant array field when using a nonempty CSV field.
3. Supply `selectedRevisions` with one entry per exact supplier/PO and explicit `coverage` of `complete` or `partial`.
4. Run the Actor and inspect the order-line and promise-lot evidence alongside the findings.
5. Download full JSON, evidence CSV, findings CSV or standalone HTML. Keep the unresolved evidence with any handoff.

### Input and quantity rules

Order lines contain `rowId`, `supplierId`, `poId`, `lineId`, `sku`, `unit`, `orderedQuantity` and `requiredDeliveryDate`. Promise lots contain the same exact identities, plus `revisionId`, `promiseId`, `quantity`, `status` and optional `promisedDeliveryDate`. Status is exactly `confirmed`, `backordered` or `cancelled`.

Quantities are positive decimal strings with at most 15 integer digits and six fractional digits. Dates are real `YYYY-MM-DD` calendar dates. The Actor uses exact decimal arithmetic and produces decimal strings; it never totals quantities across unlike units or invents a unit conversion.

CSV supports BOMs and quoted values. Required mapped headers must exist and be distinct. Duplicate or unmapped headers and irregular rows are rejected. A blank optional promise date means no supplied date. Every source row needs a unique `rowId` within its table; this does not make repeated business identities safe.

### What does the output mean?

| Field | Meaning |
| --- | --- |
| `selectedRevisionId`, `coverage` | Your declared scope for this supplier/PO |
| `confirmedQuantity`, `backorderedQuantity` | Active promise declarations in the selected supplied scope |
| `cancelledQuantity` | Separate cancellation declaration, never fulfillment |
| `onTimeQuantity`, `lateQuantity`, `undatedQuantity` | Active promise quantities relative to the required date |
| `declaredQuantity` | Confirmed + backordered + cancelled declarations |
| `observedQuantityDelta` | Supplied declaration quantity minus ordered quantity |
| `unallocatedQuantity` | Ordered minus declared quantity only for resolved, complete supplied scope |
| `sourceRefs` | Exact input table indexes and row references supporting the evidence |

One dataset item contains the complete report, source evidence, rows and findings. The dataset can be downloaded in formats including JSON, CSV, HTML or Excel through Apify; the dedicated evidence CSV is the flat line-and-lot artifact. The dedicated HTML download is escaped, has no external scripts and should be opened locally.

### How are partial and ambiguous schedules handled?

Partial coverage describes supplied lots only. The report leaves `unallocatedQuantity` unknown; it cannot establish what an omitted part of the schedule contains. Even when you declare complete coverage, a missing line stays unknown instead of becoming zero or cancelled.

Repeated order keys or selected-revision entries are unresolved even when identical. A duplicate `promiseId` within the same supplier/PO/revision, including across lines, is not counted. Incompatible SKU/unit evidence also prevents full-line totals. Valid individual selected lots remain visible when another lot makes the full line unresolved. Unselected revisions remain traceable as `superseded_revision` rows and contribute no quantity to the selected schedule.

### Price, limits and recovery

The price is **$0.25 per completed report**, with platform usage included. There is one `report-completed` event and no positive dataset-item or startup event. Each new run is billable again; a same-run resurrection repairs missing exports without producing a second dataset item or report event when the prior report and charge are intact.

Input is limited to 4 MB and 2,000 combined order, promise and selector rows. Ambiguous source-reference fanout is capped at 20,000 occurrences. Full JSON must remain below 8 MB and each export below 9 MB before a report event can be charged. Split larger or heavily duplicated batches. Malformed input, insufficient budget and output-cap failure do not deliver a completed report event.

### Boundaries and support

A promise is future supplied evidence. This report does not establish supplier approval, an accepted contract, shipment, delivery, fulfillment, purchasing authority or live ERP state. It does not compare prices, invoices or receipts, parse EDI/XML/PDF files, forecast demand or message a vendor. Normalize your records before use, and upload only opaque authorized identifiers; inputs and results are stored in your Apify run.

A balanced supplied declaration is not a business approval. Review flagged or incomplete records with their source references. Use the Issues tab for a reproducible synthetic example and the API tab for programmatic batch access.

# Actor input Schema

## `snapshotId` (type: `string`):

Opaque caller reference. Use authorized pseudonymous supplier/order identifiers, no contact or personal information.

## `orderLines` (type: `array`):

Rows: rowId,supplierId,poId,lineId,sku,unit,positive decimal-string orderedQuantity and requiredDeliveryDate YYYY-MM-DD. Exact supplier/PO/line key; repeated business keys unresolved. Unique rowId per table. Supply array OR nonemptyCSV; delete this array field for CSV. Explicit \[] means no order evidence.

## `orderLinesCsv` (type: `string`):

Alternative to orderLines array. BOM and quoted fields supported. All mapped order columns required; duplicate/unmapped headers or irregular rows rejected. IDs preserved as strings. Remove array field to use CSV.

## `orderColumns` (type: `object`):

Map every canonical order field to a distinct CSV header. Custom mapping only with CSV; canonical mapping is harmless with arrays. No hidden extra columns.

## `promiseLots` (type: `array`):

Rows: rowId,supplierId,poId,lineId,revisionId,promiseId,sku,unit,positive decimal-string quantity,status confirmed/backordered/cancelled,optional promisedDeliveryDate YYYY-MM-DD. Distinct promiseId permits split lots. Duplicate supplier/PO/revision/promiseId unresolved, not summed. All revisions may be supplied; only explicitly selected revision counts. Supply array OR nonemptyCSV; delete array for CSV.

## `promiseLotsCsv` (type: `string`):

Alternative to promiseLots array. All mapped columns except promisedDeliveryDate required. Blank date means unknown/not supplied, never inferred. BOM/quoted fields supported; duplicate/unmapped headers and irregular rows rejected. Delete array field to use CSV.

## `promiseColumns` (type: `object`):

Map every canonical promise field including optional date to distinct headers. Custom mapping requires CSV. Canonical mapping accepted with arrays.

## `selectedRevisions` (type: `array`):

Entries: supplierId,poId,revisionId,coverage complete/partial. Exactly one selected revision per supplier/PO. Repeated entries unresolved even when identical. No latest, lexical or timestamp selection. Complete means caller-declared supplied revision scope only; missing lines stay unknown. Total 2000 combined rows across orders,promises,selectors; totalJSON4MB,20,000 source references and precharge output caps.

## Actor input object example

```json
{
  "snapshotId": "synthetic-revision-review-2026-10-04",
  "orderLines": [
    {
      "rowId": "o1",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o2",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o3",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o4",
      "supplierId": "002",
      "poId": "PO2",
      "lineId": "L4",
      "sku": "SKU4",
      "unit": "kg",
      "orderedQuantity": "5",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o5",
      "supplierId": "003",
      "poId": "PO3",
      "lineId": "L5",
      "sku": "SKU5",
      "unit": "ea",
      "orderedQuantity": "8",
      "requiredDeliveryDate": "2026-10-20"
    }
  ],
  "orderColumns": {
    "rowId": "rowId",
    "supplierId": "supplierId",
    "poId": "poId",
    "lineId": "lineId",
    "sku": "sku",
    "unit": "unit",
    "orderedQuantity": "orderedQuantity",
    "requiredDeliveryDate": "requiredDeliveryDate"
  },
  "promiseLots": [
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p1",
      "revisionId": "r-selected",
      "promiseId": "lot1",
      "quantity": "6",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p2",
      "revisionId": "r-selected",
      "promiseId": "lot2",
      "quantity": "4",
      "status": "backordered",
      "promisedDeliveryDate": "2026-10-25"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p3",
      "revisionId": "z-old",
      "promiseId": "lot3",
      "quantity": "10",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "rowId": "p4",
      "revisionId": "r-selected",
      "promiseId": "lot4",
      "quantity": "9",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "rowId": "p5",
      "revisionId": "r-selected",
      "promiseId": "lot5",
      "quantity": "1",
      "status": "cancelled"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "rowId": "p6",
      "revisionId": "r-selected",
      "promiseId": "duplicate",
      "quantity": "5",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "rowId": "p7",
      "revisionId": "r-selected",
      "promiseId": "duplicate",
      "quantity": "5",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "002",
      "poId": "PO2",
      "lineId": "L4",
      "sku": "SKU4",
      "unit": "kg",
      "rowId": "p8",
      "revisionId": "r-selected",
      "promiseId": "lot8",
      "quantity": "2",
      "status": "confirmed"
    },
    {
      "supplierId": "003",
      "poId": "PO3",
      "lineId": "L5",
      "sku": "SKU5",
      "unit": "box",
      "rowId": "p9",
      "revisionId": "r-selected",
      "promiseId": "lot9",
      "quantity": "8",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    }
  ],
  "promiseColumns": {
    "rowId": "rowId",
    "supplierId": "supplierId",
    "poId": "poId",
    "lineId": "lineId",
    "revisionId": "revisionId",
    "promiseId": "promiseId",
    "sku": "sku",
    "unit": "unit",
    "quantity": "quantity",
    "status": "status",
    "promisedDeliveryDate": "promisedDeliveryDate"
  },
  "selectedRevisions": [
    {
      "supplierId": "001",
      "poId": "PO1",
      "revisionId": "r-selected",
      "coverage": "complete"
    },
    {
      "supplierId": "002",
      "poId": "PO2",
      "revisionId": "r-selected",
      "coverage": "partial"
    },
    {
      "supplierId": "003",
      "poId": "PO3",
      "revisionId": "r-selected",
      "coverage": "complete"
    }
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `json` (type: `string`):

No description

## `evidence` (type: `string`):

No description

## `findings` (type: `string`):

No description

## `html` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "snapshotId": "synthetic-revision-review-2026-10-04",
    "orderLines": [
        {
            "rowId": "o1",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20"
        },
        {
            "rowId": "o2",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20"
        },
        {
            "rowId": "o3",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20"
        },
        {
            "rowId": "o4",
            "supplierId": "002",
            "poId": "PO2",
            "lineId": "L4",
            "sku": "SKU4",
            "unit": "kg",
            "orderedQuantity": "5",
            "requiredDeliveryDate": "2026-10-20"
        },
        {
            "rowId": "o5",
            "supplierId": "003",
            "poId": "PO3",
            "lineId": "L5",
            "sku": "SKU5",
            "unit": "ea",
            "orderedQuantity": "8",
            "requiredDeliveryDate": "2026-10-20"
        }
    ],
    "orderLinesCsv": "",
    "orderColumns": {
        "rowId": "rowId",
        "supplierId": "supplierId",
        "poId": "poId",
        "lineId": "lineId",
        "sku": "sku",
        "unit": "unit",
        "orderedQuantity": "orderedQuantity",
        "requiredDeliveryDate": "requiredDeliveryDate"
    },
    "promiseLots": [
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p1",
            "revisionId": "r-selected",
            "promiseId": "lot1",
            "quantity": "6",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p2",
            "revisionId": "r-selected",
            "promiseId": "lot2",
            "quantity": "4",
            "status": "backordered",
            "promisedDeliveryDate": "2026-10-25"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p3",
            "revisionId": "z-old",
            "promiseId": "lot3",
            "quantity": "10",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "rowId": "p4",
            "revisionId": "r-selected",
            "promiseId": "lot4",
            "quantity": "9",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "rowId": "p5",
            "revisionId": "r-selected",
            "promiseId": "lot5",
            "quantity": "1",
            "status": "cancelled"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "rowId": "p6",
            "revisionId": "r-selected",
            "promiseId": "duplicate",
            "quantity": "5",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "rowId": "p7",
            "revisionId": "r-selected",
            "promiseId": "duplicate",
            "quantity": "5",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        },
        {
            "supplierId": "002",
            "poId": "PO2",
            "lineId": "L4",
            "sku": "SKU4",
            "unit": "kg",
            "rowId": "p8",
            "revisionId": "r-selected",
            "promiseId": "lot8",
            "quantity": "2",
            "status": "confirmed"
        },
        {
            "supplierId": "003",
            "poId": "PO3",
            "lineId": "L5",
            "sku": "SKU5",
            "unit": "box",
            "rowId": "p9",
            "revisionId": "r-selected",
            "promiseId": "lot9",
            "quantity": "8",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18"
        }
    ],
    "promiseLotsCsv": "",
    "promiseColumns": {
        "rowId": "rowId",
        "supplierId": "supplierId",
        "poId": "poId",
        "lineId": "lineId",
        "revisionId": "revisionId",
        "promiseId": "promiseId",
        "sku": "sku",
        "unit": "unit",
        "quantity": "quantity",
        "status": "status",
        "promisedDeliveryDate": "promisedDeliveryDate"
    },
    "selectedRevisions": [
        {
            "supplierId": "001",
            "poId": "PO1",
            "revisionId": "r-selected",
            "coverage": "complete"
        },
        {
            "supplierId": "002",
            "poId": "PO2",
            "revisionId": "r-selected",
            "coverage": "partial"
        },
        {
            "supplierId": "003",
            "poId": "PO3",
            "revisionId": "r-selected",
            "coverage": "complete"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("h_murdock/supplier-promise-schedule-evidence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "snapshotId": "synthetic-revision-review-2026-10-04",
    "orderLines": [
        {
            "rowId": "o1",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20",
        },
        {
            "rowId": "o2",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20",
        },
        {
            "rowId": "o3",
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "orderedQuantity": "10",
            "requiredDeliveryDate": "2026-10-20",
        },
        {
            "rowId": "o4",
            "supplierId": "002",
            "poId": "PO2",
            "lineId": "L4",
            "sku": "SKU4",
            "unit": "kg",
            "orderedQuantity": "5",
            "requiredDeliveryDate": "2026-10-20",
        },
        {
            "rowId": "o5",
            "supplierId": "003",
            "poId": "PO3",
            "lineId": "L5",
            "sku": "SKU5",
            "unit": "ea",
            "orderedQuantity": "8",
            "requiredDeliveryDate": "2026-10-20",
        },
    ],
    "orderLinesCsv": "",
    "orderColumns": {
        "rowId": "rowId",
        "supplierId": "supplierId",
        "poId": "poId",
        "lineId": "lineId",
        "sku": "sku",
        "unit": "unit",
        "orderedQuantity": "orderedQuantity",
        "requiredDeliveryDate": "requiredDeliveryDate",
    },
    "promiseLots": [
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p1",
            "revisionId": "r-selected",
            "promiseId": "lot1",
            "quantity": "6",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p2",
            "revisionId": "r-selected",
            "promiseId": "lot2",
            "quantity": "4",
            "status": "backordered",
            "promisedDeliveryDate": "2026-10-25",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L1",
            "sku": "SKU1",
            "unit": "ea",
            "rowId": "p3",
            "revisionId": "z-old",
            "promiseId": "lot3",
            "quantity": "10",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "rowId": "p4",
            "revisionId": "r-selected",
            "promiseId": "lot4",
            "quantity": "9",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L2",
            "sku": "SKU2",
            "unit": "ea",
            "rowId": "p5",
            "revisionId": "r-selected",
            "promiseId": "lot5",
            "quantity": "1",
            "status": "cancelled",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "rowId": "p6",
            "revisionId": "r-selected",
            "promiseId": "duplicate",
            "quantity": "5",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
        {
            "supplierId": "001",
            "poId": "PO1",
            "lineId": "L3",
            "sku": "SKU3",
            "unit": "ea",
            "rowId": "p7",
            "revisionId": "r-selected",
            "promiseId": "duplicate",
            "quantity": "5",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
        {
            "supplierId": "002",
            "poId": "PO2",
            "lineId": "L4",
            "sku": "SKU4",
            "unit": "kg",
            "rowId": "p8",
            "revisionId": "r-selected",
            "promiseId": "lot8",
            "quantity": "2",
            "status": "confirmed",
        },
        {
            "supplierId": "003",
            "poId": "PO3",
            "lineId": "L5",
            "sku": "SKU5",
            "unit": "box",
            "rowId": "p9",
            "revisionId": "r-selected",
            "promiseId": "lot9",
            "quantity": "8",
            "status": "confirmed",
            "promisedDeliveryDate": "2026-10-18",
        },
    ],
    "promiseLotsCsv": "",
    "promiseColumns": {
        "rowId": "rowId",
        "supplierId": "supplierId",
        "poId": "poId",
        "lineId": "lineId",
        "revisionId": "revisionId",
        "promiseId": "promiseId",
        "sku": "sku",
        "unit": "unit",
        "quantity": "quantity",
        "status": "status",
        "promisedDeliveryDate": "promisedDeliveryDate",
    },
    "selectedRevisions": [
        {
            "supplierId": "001",
            "poId": "PO1",
            "revisionId": "r-selected",
            "coverage": "complete",
        },
        {
            "supplierId": "002",
            "poId": "PO2",
            "revisionId": "r-selected",
            "coverage": "partial",
        },
        {
            "supplierId": "003",
            "poId": "PO3",
            "revisionId": "r-selected",
            "coverage": "complete",
        },
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("h_murdock/supplier-promise-schedule-evidence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "snapshotId": "synthetic-revision-review-2026-10-04",
  "orderLines": [
    {
      "rowId": "o1",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o2",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o3",
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "orderedQuantity": "10",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o4",
      "supplierId": "002",
      "poId": "PO2",
      "lineId": "L4",
      "sku": "SKU4",
      "unit": "kg",
      "orderedQuantity": "5",
      "requiredDeliveryDate": "2026-10-20"
    },
    {
      "rowId": "o5",
      "supplierId": "003",
      "poId": "PO3",
      "lineId": "L5",
      "sku": "SKU5",
      "unit": "ea",
      "orderedQuantity": "8",
      "requiredDeliveryDate": "2026-10-20"
    }
  ],
  "orderLinesCsv": "",
  "orderColumns": {
    "rowId": "rowId",
    "supplierId": "supplierId",
    "poId": "poId",
    "lineId": "lineId",
    "sku": "sku",
    "unit": "unit",
    "orderedQuantity": "orderedQuantity",
    "requiredDeliveryDate": "requiredDeliveryDate"
  },
  "promiseLots": [
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p1",
      "revisionId": "r-selected",
      "promiseId": "lot1",
      "quantity": "6",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p2",
      "revisionId": "r-selected",
      "promiseId": "lot2",
      "quantity": "4",
      "status": "backordered",
      "promisedDeliveryDate": "2026-10-25"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L1",
      "sku": "SKU1",
      "unit": "ea",
      "rowId": "p3",
      "revisionId": "z-old",
      "promiseId": "lot3",
      "quantity": "10",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "rowId": "p4",
      "revisionId": "r-selected",
      "promiseId": "lot4",
      "quantity": "9",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L2",
      "sku": "SKU2",
      "unit": "ea",
      "rowId": "p5",
      "revisionId": "r-selected",
      "promiseId": "lot5",
      "quantity": "1",
      "status": "cancelled"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "rowId": "p6",
      "revisionId": "r-selected",
      "promiseId": "duplicate",
      "quantity": "5",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "001",
      "poId": "PO1",
      "lineId": "L3",
      "sku": "SKU3",
      "unit": "ea",
      "rowId": "p7",
      "revisionId": "r-selected",
      "promiseId": "duplicate",
      "quantity": "5",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    },
    {
      "supplierId": "002",
      "poId": "PO2",
      "lineId": "L4",
      "sku": "SKU4",
      "unit": "kg",
      "rowId": "p8",
      "revisionId": "r-selected",
      "promiseId": "lot8",
      "quantity": "2",
      "status": "confirmed"
    },
    {
      "supplierId": "003",
      "poId": "PO3",
      "lineId": "L5",
      "sku": "SKU5",
      "unit": "box",
      "rowId": "p9",
      "revisionId": "r-selected",
      "promiseId": "lot9",
      "quantity": "8",
      "status": "confirmed",
      "promisedDeliveryDate": "2026-10-18"
    }
  ],
  "promiseLotsCsv": "",
  "promiseColumns": {
    "rowId": "rowId",
    "supplierId": "supplierId",
    "poId": "poId",
    "lineId": "lineId",
    "revisionId": "revisionId",
    "promiseId": "promiseId",
    "sku": "sku",
    "unit": "unit",
    "quantity": "quantity",
    "status": "status",
    "promisedDeliveryDate": "promisedDeliveryDate"
  },
  "selectedRevisions": [
    {
      "supplierId": "001",
      "poId": "PO1",
      "revisionId": "r-selected",
      "coverage": "complete"
    },
    {
      "supplierId": "002",
      "poId": "PO2",
      "revisionId": "r-selected",
      "coverage": "partial"
    },
    {
      "supplierId": "003",
      "poId": "PO3",
      "revisionId": "r-selected",
      "coverage": "complete"
    }
  ]
}' |
apify call h_murdock/supplier-promise-schedule-evidence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,h_murdock/supplier-promise-schedule-evidence"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WftS8D7jzYDvIHXji/builds/UP2nhOCqE2xVDl1PC/openapi.json
