---
sourceDocument: Yokohama Finance and Supply Chain
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/yokohama/source-to-pay-operations

 Release :

    - yokohama

ft:locale :

    - en-US

ft:publication_title :

    - Yokohama Finance and Supply Chain

ft:clusterId :

    - stpop

bundleId :

    - stpop

workflow :

    - Employee


---

# Spendint API - POST /sn_spend_intg/spendint/price

# Spendint API - POST /sn_spend_intg/spendint/price {#ariaid-title1}

* Release version: Yokohama
* 
* Updated January 30, 2025
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 minutes to read

Summarize  
![AI sparkle icon](https://servicenow.com/docs/portal-asset/ai-sparkle-icon) Summarized using AI  
This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.  

## Summary of Spendint API - POST /snspendintg/spendint/price

The Spendint API endpoint/snspendintg/spendint/priceenables ServiceNow customers to update pricing information for supplier product records.
It uses the product SKU to identify existing supplier products and updates their contract prices accordingly.
If no matching product is found, the API returns an error indicating the product does not exist.
Show full answer Show less  

## Key Features

* **Product Pricing Update:** Updates contract prices for supplier products identified by SKU.
* **Error Handling:** Returns detailed error messages when products are missing or data validation issues occur.
* **Status Monitoring:** Customers can query the Price Error and Outbound Status tables via REST API to track failed price import requests, filtering by supplier ID and error state.
* **Request Modes:** Supports asynchronous (`async`) and synchronous (`sync`) modes for third-party integrations, with asynchronous as default.
* **Batch Processing:** Allows updating up to 1000 products per transaction.

## Request Parameters

* **Path parameters:** None required.
* **Query parameters:** `mode` to specify async or sync execution.
* **Request body:** Must include `customerid`, `catalogid`, `supplierid`, optional `thirdpartyimportid`, and a list of `products`.

Each product entry must include:

* `sku` (unique product identifier)
* `contractagreement` object with required fields: `contractnumber`, `negotiatedcurrency`, `negotiatedprice`, and optional `contractstartdate` and `contractenddate` in YYYY-MM-DD format.

## Headers

* **Request:** `Accept` header to specify response format (only `application/json` supported for Procurement Integration Framework).
* **Response:** No special headers defined.

## Status Codes and Responses

* `success:` Request processed successfully.
* `failure:` Request processed with errors; detailed error messages returned per SKU.

The synchronous response includes an array of error messages linked to SKUs when failures occur.

## Practical Use

ServiceNow customers can use this API to programmatically update supplier product pricing in bulk, ensuring contract pricing stays current. Proper SKU matching is crucial to avoid errors. Customers can monitor import status and troubleshoot via the Price Error and Outbound Status tables using the REST API.

Typical integration involves sending a JSON payload with supplier, customer, catalog identifiers, and product pricing details. The API supports both real-time synchronous updates and asynchronous batch processing to suit different operational needs.  
Updates any pricing for supplier product records.
When pricing is available for supplier product records, the API uses the product SKU to
find an existing supplier product. If a matching supplier product exists, the corresponding
contract price is updated. If no matching supplier product is found, an error message is
generated, stating that the product for which you are trying to update pricing for does not
exist.

## Status tables {#spendint-POST-price__section_hrm_qts_knb}

To know the status of the price import request, make a REST call into the ServiceNow database using the
Table REST API. The response from the API lists the records where the
price import request failed. For a price import response, query the Price Error table with
the following parameter:

`sysparm_query=outbound_error.supplier_id=<supplier_id>^outbound_error.state=20`

You can find the details on the customer ID, supplier ID, error type, unique import set ID,
and state can in the Outbound Status table, which is the parent error table.

## URL format {#spendint-POST-price__section_dtb_zd2_dmb}

/api/sn_spend_intg/spendint/price

## Supported request parameters

{#spendint-POST-price__entry__2}

| Name | Description |
|-|-|
| None |   |
[Table 1. Path parameters]

{#spendint-POST-price__table_bdb_dck_ymb__entry__2}

| Name | Description |
|-|-|
| mode | Support for asynchronous and synchronous modes for third-party integration. Data type: String Valid values: * async: Asynchronous mode. * sync: Synchronous mode. {#spendint-POST-price__ul_hdr_tkg_ymb} Default: async |
[Table 2. Query parameters]

{#spendint-POST-price__table_bdb_dck_ymb} {#spendint-POST-price__entry__10}

| Name | Description |
|-|-|
| catalog_id | Required. Identifier for the catalog content that can be purchased by a customer. Data type: String Maximum length: 100 |
| customer_id | Required. Identifier for the customer. Data type: String Maximum length: 100 |
| products | List of objects that define products to create or update. Each transaction has a limit of 1000 products. Data type: Array "products": [ { "contract_agreement": {Array}, "sku": "String" } ] |
| products.contract_agreement | Details of the contract for a product. Data type: Object "contract_agreement": { "contract_end_date": "String", "contract_number": "String", "contract_start_date": "String", "negotiated_currency ": "String", "negotiated_price": "String" } |
| products.contract_agreement.contract_end_date | Date on which the contract term ends. Data type: String Maximum length: 40 Format: YYYY-MM-DD |
| products.contract_agreement.contract_number | Required. Number of the active contract that is associated with the product. Data type: String Maximum length: 100 |
| products.contract_agreement.contract_start_date | Date on which the contract term starts. Data type: String Maximum length: 40 Format: YYYY-MM-DD |
| products.contract_agreement.negotiated_currency | Required. Currency of the negotiated price. Data type: String Maximum length: 40 |
| products.contract_agreement.negotiated_price | Required. Unit price of a product as negotiated through a contract with the supplier or reseller. Data type: String Maximum length: 40 |
| products.sku | Required. Number that is generated by a supplier that uniquely identifies a product that is sold by that supplier. Data type: String Maximum length: 100 |
| supplier_id | Required. Identifier for the reseller or supplier that the customer can place orders with. Data type: String Maximum length: 100 |
| third_party_import_id | Identifier that enables a third party to pass a string value to uniquely identify a set of imported data. Data type: String Maximum length: 100 |
[Table 3. Request body parameters (XML or JSON)]

## Headers

The following request and response headers apply to this HTTP action only or apply to this
action in a distinct way.
{#spendint-POST-price__entry__36}{#spendint-POST-price__accept-RESTAPI}

| Header | Description |
|-|-|
| Accept | Data format of the response body. Supported types: application/json or application/xml. Default: application/json |
[Table 4. Request headers]

Note:  
Only the application/json data format is supported for Procurement Integration Framework.
{#spendint-POST-price__entry__40}

| Header | Description |
|-|-|
| None |   |
[Table 5. Response headers]

## Status codes

The following status codes apply to this HTTP action.
{#spendint-POST-price__table_lml_1qg_ymb__entry__2}

| Status code | Description |
|-|-|
| success | Successful. The request was successfully processed. |
| failure | Unsuccessful. The request was processed with errors. |
[Table 6. Status codes]

{#spendint-POST-price__table_lml_1qg_ymb}

## Response body
parameters
(JSON) {#spendint-POST-price__section_iy2_1hk_ymb}

These response body parameters are received when queried in synchronous mode.{#spendint-POST-price__table_jy2_1hk_ymb__entry__2}

| Name | Description |
|-|-|
| error_response_body | Description of the errors, listed by sku and the error message. Data type: Array |
| error_response_body.error_message | Detailed error message. Data type: String |
| status_code | Response status such as "success" or "failure." Data type: String |
[ ]

{#spendint-POST-price__table_jy2_1hk_ymb}  

## cURL request

    curl "https://instance.service-now.com/api/sn_spend_intg/spendint/price" \
    --request POST \
    --header "Accept:application/json" \
    --user 'username':'password'
    {"root": [{
      "customer_id": "ACME CORP",
      "catalog_id": "AB-1234323",
      "supplier_id": "SUP-123456",
      "third_party_import_id": "DEL789876",
      "products": [
        {
          "sku": "5578874",
          "contract_agreement": {
            "contract_number": "34567892",
            "contract_start_date": "YYYY-MM-DD",
            "contract_end_date": "YYYY-MM-DD",
            "negotiated_price": "456",
            "negotiated_currency ": "USD"
          }
        }
      ]
    }
    ]}

Possible responses:

    // Success response:
    {
        "result": {
            "response": "success"
        }
    }

    // Error response:
    {
        "result": {
            "response": [
                {
                    "customer_id": "ACME CORP",
                    "supplier_id": "SUP-123456",
                    "third_party_import_id": "DEL789876",
                    "status_code": "failure",
                    "error_response_body": [
                        {
                            "sku": "5578874",
                            "error_message": "The product for which you are trying to update pricing does not exist\nField Value empty/Formatting issue Negotiated currency\nField Value empty/Formatting issue Contract start date\nField Value empty/Formatting issue Contract end date\n"
                        }
                    ]
                }
            ]
        }
    }


