Create payment resource | Moov Documentation

Create payment resource

Creates a payment resource to represent that an invoice was paid outside of the Moov platform. If a payment link was created for the invoice, the corresponding payment link is canceled, but a receipt is still sent.

To access this endpoint using an access token you'll need to specify the /accounts/{accountID}/invoices.write scope.

POST

/accounts/{accountID}/invoices/{invoiceID}/payments

Ask

curl -X POST "https://api.moov.io/accounts/{accountID}/invoices/{invoiceID}/payments" \
  -H "Authorization: Bearer {token}" \
  -H "X-Moov-Version: v2026.07.00" \
  -d '{\n  "amount": {\n    "currency": "USD",\n    "valueDecimal": "12.987654321"\n  }\n}'

Ask

mc, _ := moov.NewClient()

accountID := "241bf524-e777-4941-a5e4-d7f3f34d7a00"
invoiceID := "3dfff852-927d-47e8-822c-2fffc57ff6b9"

mc.CreateInvoicePayment(ctx, accountID, invoiceID, moov.CreateInvoicePayment{
  ForeignID:   moov.PtrOf("EXT-PAY-12345"),
  Description: moov.PtrOf("Payment received via wire transfer"),
  Amount:      moov.AmountDecimal{
    Currency: "USD",
    ValueDecimal: "500.00",
  },
})

Ask

import { Moov } from "@moovio/sdk";

const moov = new Moov({
  security: {
    username: "",
    password: "",
  },
});

async function run() {
  const result = await moov.invoices.createInvoicePayment({
    accountID: "e02333e4-a835-46d1-8d02-9af7a405e65f",
    invoiceID: "99e7ebb0-9996-49b2-98f0-304c7332ece6",
    createInvoicePayment: {
      foreignID: "EXT-PAY-12345",
      amount: {
        currency: "USD",
        valueDecimal: "500.00",
      },
      description: "Payment received via wire transfer",
      paymentDate: new Date("2026-01-20T14:45:00Z"),
    },
  });

console.log(result);
}

run();

Ask

declare(strict_types=1);

require 'vendor/autoload.php';

use Moov\MoovPhp;
use Moov\MoovPhp\Models\Components;
use Moov\MoovPhp\Utils;

$sdk = MoovPhp\Moov::builder()
    ->setSecurity(
        new Components\Security(
            username: '',
            password: '',
        )
    )
    ->build();

$createInvoicePayment = new Components\CreateInvoicePayment(
    foreignID: 'EXT-PAY-12345',
    amount: new Components\AmountDecimal(
        currency: 'USD',
        valueDecimal: '500.00',
    ),
    description: 'Payment received via wire transfer',
    paymentDate: Utils\Utils::parseDateTime('2026-01-20T14:45:00Z'),
);

$response = $sdk->invoices->createInvoicePayment(
    accountID: 'e02333e4-a835-46d1-8d02-9af7a405e65f',
    invoiceID: '99e7ebb0-9996-49b2-98f0-304c7332ece6',
    createInvoicePayment: $createInvoicePayment
);

if ($response->invoicePayment !== null) {
    // handle response
}

Ask

package hello.world;

import io.moov.sdk.Moov;
import io.moov.sdk.models.components.*;
import io.moov.sdk.models.errors.CreateInvoicePaymentError;
import io.moov.sdk.models.errors.GenericError;
import io.moov.sdk.models.operations.CreateInvoicePaymentResponse;
import java.lang.Exception;
import java.time.OffsetDateTime;

public class Application {

public static void main(String[] args) throws GenericError, CreateInvoicePaymentError, Exception {

Moov sdk = Moov.builder()
                .security(Security.builder()
                    .username("")
                    .password("")
                    .build())
            .build();

CreateInvoicePaymentResponse res = sdk.invoices().createInvoicePayment()
                .accountID("e02333e4-a835-46d1-8d02-9af7a405e65f")
                .invoiceID("99e7ebb0-9996-49b2-98f0-304c7332ece6")
                .createInvoicePayment(CreateInvoicePayment.builder()
                    .amount(AmountDecimal.builder()
                        .currency("USD")
                        .valueDecimal("500.00")
                        .build())
                    .foreignID("EXT-PAY-12345")
                    .description("Payment received via wire transfer")
                    .paymentDate(OffsetDateTime.parse("2026-01-20T14:45:00Z"))
                    .build())
                .call();

if (res.invoicePayment().isPresent()) {
            System.out.println(res.invoicePayment().get());
        }
    }
}

Ask

from moovio_sdk import Moov
from moovio_sdk.models import components
from moovio_sdk.utils import parse_datetime

with Moov(
    security=components.Security(
        username="",
        password="",
    ),
) as moov:

res = moov.invoices.create_invoice_payment(account_id="e02333e4-a835-46d1-8d02-9af7a405e65f", invoice_id="99e7ebb0-9996-49b2-98f0-304c7332ece6", amount={
        "currency": "USD",
        "value_decimal": "500.00",
    }, foreign_id="EXT-PAY-12345", description="Payment received via wire transfer", payment_date=parse_datetime("2026-01-20T14:45:00Z"))

# Handle response
    print(res)

Ask

require 'moov_ruby'

Models = ::Moov::Models
s = ::Moov::Client.new(
  security: Models::Components::Security.new(
    username: '',
    password: ''
  )
)
res = s.invoices.create_invoice_payment(account_id: 'e02333e4-a835-46d1-8d02-9af7a405e65f', invoice_id: '99e7ebb0-9996-49b2-98f0-304c7332ece6', create_invoice_payment: Models::Components::CreateInvoicePayment.new(
  foreign_id: 'EXT-PAY-12345',
  amount: Models::Components::AmountDecimal.new(
    currency: 'USD',
    value_decimal: '500.00'
  ),
  description: 'Payment received via wire transfer',
  payment_date: DateTime.iso8601('2026-01-20T14:45:00Z')
))

unless res.invoice_payment.nil?
  # handle response
end

Ask

using Moov.Sdk;
using Moov.Sdk.Models.Components;
using System;

var sdk = new MoovClient(security: new Security() {
    Username = "",
    Password = "",
});

var res = await sdk.Invoices.CreateInvoicePaymentAsync(
    accountID: "e02333e4-a835-46d1-8d02-9af7a405e65f",
    invoiceID: "99e7ebb0-9996-49b2-98f0-304c7332ece6",
    body: new CreateInvoicePayment() {
        ForeignID = "EXT-PAY-12345",
        Amount = new AmountDecimal() {
            Currency = "USD",
            ValueDecimal = "500.00",
        },
        Description = "Payment received via wire transfer",
        PaymentDate = System.DateTime.Parse("2026-01-20T14:45:00Z").ToUniversalTime(),
    }
);

// handle response

External payment

{
  "amount": {
    "currency": "USD",
    "valueDecimal": "500.00"
  },
  "external": {
    "description": "Payment via external system",
    "foreignID": "EXT-PAY-12345",
    "paymentDate": "2026-01-20T14:45:00Z"
  },
  "invoicePaymentID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "invoicePaymentType": "external"
}

Response headers

A unique identifier used to trace requests.


The server could not understand the request due to invalid syntax.


The request contained missing or expired authentication.


The user is not authorized to make the request.


The requested resource was not found.


The request conflicted with the current state of the target resource.