Payment API returns HTTP 200 even when invoice_id does not exist

Hello team,

We are integrating with Financial Edge NXT and using the following endpoint to create payments:

POST https://api.sky.blackbaud.com/treasury/v1/payments/createpayment

Issue

We observed that when attempting to create a payment using an invoice_id that does not exist, the API still returns an HTTP 200 OK response, but the payment is not actually created.

Instead of returning an error, the API returns an empty check_numbers array.

This makes it difficult to reliably detect payment failures in our integration.

Working Request (Valid invoice_id)

{    "bank_account_id": 1,    "starting_check_number": 11130,    "discount_date": "Payment date",    "payment_date": "2026-04-09",    "post_date": "2026-04-09",    "post_date_operator": "Payment date",    "post_status": "Not yet posted",    "invoices": [        {            "invoice_id": 5784,            "amount": 1.0        }    ]}

Response

{    "check_numbers": [        11130    ]}

Non-working Request (invoice_id does not exist)

{    "bank_account_id": 1,    "starting_check_number": 11121,    "discount_date": "Payment date",    "payment_date": "2026-04-09",    "post_date": "2026-04-07",    "post_date_operator": "Payment date",    "post_status": "Not yet posted",    "invoices": [        {            "invoice_id": 57853,            "amount": 1.0        }    ]}

Response

{    "check_numbers": []}

Business Scenario

A customer initially created an invoice in the Blackbaud production environment, which we successfully synced into our system.

Later, the customer deleted the invoice in Blackbaud, but the deleted invoice record still existed in our system.

The customer then attempted to create a payment using this deleted invoice ID.

The API returned HTTP 200 OK, but the payment was not created.

We also tested locally by passing a completely non-existent invoice_id in Financial Edge NXT, and observed the same behaviour.

Questions

  1. Is this the expected behaviour of the /treasury/v1/payments/createpayment API?
  2. Should the API ideally return an error response when the invoice_id does not exist?
  3. Is there a recommended validation step to confirm invoice existence before calling the payment API?
  4. What is the recommended way to reliably detect payment creation failure when the invoice_id is invalid?
  5. Are there any known best practices for handling deleted invoices in Financial Edge NXT integrations?

Concern

Since the API returns HTTP 200 even when no payment is created, integrations may incorrectly assume that the payment was successful.

We want to ensure our integration properly handles this scenario and avoids false success cases.

Answers

Categories