Update expense

Credentials

No credentials are documented for this endpoint.

Partially update an existing expense document. Only expenses with pending status can be updated.

The partner can only update expenses within their own scope, and the expense must belong to the provided sellerId.

Immutable fields (rejected if provided): id, uid, partnerId, createdAt, updatedAt, updatedBy, seller, supplierSnapshot, vatReportSnapshot, isAbleToAutoApprove, status.

Parameters

Name In Type Required Description
expenseId path string yes Expense UUID to update

Request body

Content type: application/json

Field Type Required Description
sellerId string no Seller UUID the expense belongs to
valueDate string no Expense value date (ISO 8601 UTC)
totalAmount number no Total expense amount
vatAmount number no VAT amount (must be ≤ totalAmount)
currency string no Currency code
captureMethod string no How the expense was captured (e.g., 'manual')
docType string no Document type
docRegulationId string no Document regulation ID
docLocatorNumber string no Document locator number
classification integer no Classification ID (must be valid for seller/partner context)
deductibleIncomeTaxPercent integer no Deductible income tax percentage (0–100)
deductibleVatPercent integer no Deductible VAT percentage (0–100)
assetVatRefundPercent integer no Asset VAT refund percentage (0–100)
comment string no Optional partner note
supplierName string no Supplier name
supplierVatId string no Supplier VAT ID
vatAllocationNumber string no VAT allocation number (nullable)
isExcludeFromPCN boolean no Whether to exclude from PCN report

Request example

{
  "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
  "valueDate": "2025-10-28T00:00:00.000Z",
  "totalAmount": 15000,
  "vatAmount": 2288,
  "currency": "ILS",
  "captureMethod": "manual",
  "docType": "invrec",
  "docRegulationId": "5132277",
  "docLocatorNumber": "85712",
  "classification": 6,
  "deductibleIncomeTaxPercent": 100,
  "deductibleVatPercent": 100,
  "assetVatRefundPercent": 0,
  "comment": "Optional partner note",
  "supplierName": "Supplier Ltd",
  "supplierVatId": "123456789",
  "vatAllocationNumber": null,
  "isExcludeFromPCN": false
}

Code samples

curl

curl -X PATCH 'https://sandbox.payme.io/api/public/expenses/<expenseId>' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
  "valueDate": "2025-10-28T00:00:00.000Z",
  "totalAmount": 15000,
  "vatAmount": 2288,
  "currency": "ILS",
  "captureMethod": "manual",
  "docType": "invrec",
  "docRegulationId": "5132277",
  "docLocatorNumber": "85712",
  "classification": 6,
  "deductibleIncomeTaxPercent": 100,
  "deductibleVatPercent": 100,
  "assetVatRefundPercent": 0,
  "comment": "Optional partner note",
  "supplierName": "Supplier Ltd",
  "supplierVatId": "123456789",
  "vatAllocationNumber": null,
  "isExcludeFromPCN": false
}'

Node.js

const response = await fetch("https://sandbox.payme.io/api/public/expenses/<expenseId>", {
  method: "PATCH",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
    "valueDate": "2025-10-28T00:00:00.000Z",
    "totalAmount": 15000,
    "vatAmount": 2288,
    "currency": "ILS",
    "captureMethod": "manual",
    "docType": "invrec",
    "docRegulationId": "5132277",
    "docLocatorNumber": "85712",
    "classification": 6,
    "deductibleIncomeTaxPercent": 100,
    "deductibleVatPercent": 100,
    "assetVatRefundPercent": 0,
    "comment": "Optional partner note",
    "supplierName": "Supplier Ltd",
    "supplierVatId": "123456789",
    "vatAllocationNumber": null,
    "isExcludeFromPCN": false
  }),
});

console.log(await response.text());

Python

import requests

response = requests.patch(
    "https://sandbox.payme.io/api/public/expenses/<expenseId>",
    json={
        "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
        "valueDate": "2025-10-28T00:00:00.000Z",
        "totalAmount": 15000,
        "vatAmount": 2288,
        "currency": "ILS",
        "captureMethod": "manual",
        "docType": "invrec",
        "docRegulationId": "5132277",
        "docLocatorNumber": "85712",
        "classification": 6,
        "deductibleIncomeTaxPercent": 100,
        "deductibleVatPercent": 100,
        "assetVatRefundPercent": 0,
        "comment": "Optional partner note",
        "supplierName": "Supplier Ltd",
        "supplierVatId": "123456789",
        "vatAllocationNumber": None,
        "isExcludeFromPCN": False,
    },
)

print(response.text)

PHP

<?php

$body = <<<'BODY'
{
  "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
  "valueDate": "2025-10-28T00:00:00.000Z",
  "totalAmount": 15000,
  "vatAmount": 2288,
  "currency": "ILS",
  "captureMethod": "manual",
  "docType": "invrec",
  "docRegulationId": "5132277",
  "docLocatorNumber": "85712",
  "classification": 6,
  "deductibleIncomeTaxPercent": 100,
  "deductibleVatPercent": 100,
  "assetVatRefundPercent": 0,
  "comment": "Optional partner note",
  "supplierName": "Supplier Ltd",
  "supplierVatId": "123456789",
  "vatAllocationNumber": null,
  "isExcludeFromPCN": false
}
BODY;

$ch = curl_init('https://sandbox.payme.io/api/public/expenses/<expenseId>');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => $body,
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

Responses

200 — Expense updated successfully (success)

Field Type Description
statusCode integer 0 for success
payload object
payload.expenseId string Expense UUID
payload.sellerId string Seller UUID
payload.valueDate string Expense value date
payload.totalAmount number Total expense amount
payload.vatAmount number VAT amount
payload.currency string Currency code
payload.docType string Document type
payload.docRegulationId string Document regulation ID
payload.docLocatorNumber string Document locator number
payload.classification integer Classification ID
payload.capturedDate string Timestamp when expense was captured
payload.updatedAt string Last update timestamp
{
  "statusCode": 0,
  "payload": {
    "expenseId": "edc855f7-cb7c-4d82-8c26-baf5c296d391",
    "sellerId": "a6a9700f-8571-4f9b-bfae-ba943fb96982",
    "valueDate": "2025-10-28T00:00:00.000Z",
    "totalAmount": 15000,
    "vatAmount": 2288,
    "currency": "ILS",
    "docType": "invrec",
    "docRegulationId": "5132277",
    "docLocatorNumber": "85712",
    "classification": 6,
    "capturedDate": "2025-10-28T09:13:37.423Z",
    "updatedAt": "2025-10-28T09:16:33.795Z"
  }
}

400 — Validation error (error)

Field Type Description
statusCode integer 1 for error
payload object
payload.message string Error message
payload.additionalInfo object Field-level validation details
{
  "statusCode": 1,
  "payload": {
    "message": "Invalid request",
    "additionalInfo": {
      "valueDate": "Must be a valid ISO datetime",
      "totalAmount": "Must be >= 0"
    }
  }
}

401 — Unauthorized (error)

Field Type Description
error string
error_description string
{
  "error": "unauthorized_client",
  "error_description": "Client authentication failed"
}

403 — Partner is not authorized to update this expense (error)

Field Type Description
statusCode integer 1 for error
payload object
payload.message string Error message
payload.additionalInfo object Field-level validation details
{
  "statusCode": 1,
  "payload": {
    "message": "Not allowed"
  }
}

404 — Expense or seller not found (error)

Field Type Description
statusCode integer 1 for error
payload object
payload.message string Error message
payload.additionalInfo object Field-level validation details
{
  "statusCode": 1,
  "payload": {
    "message": "Expense not found"
  }
}

409 — Update conflict (error)

Field Type Description
statusCode integer 1 for error
payload object
payload.message string Error message
payload.additionalInfo object Field-level validation details
{
  "statusCode": 1,
  "payload": {
    "message": "Update conflict"
  }
}

429 — Rate limit exceeded (error)

Field Type Description
statusCode integer 1 for error
payload object
payload.message string Error message
payload.additionalInfo object Field-level validation details
{
  "statusCode": 1,
  "payload": {
    "message": "Rate limit exceeded"
  }
}