Skip to main content
POST
/
coa
/
api
/
v1
/
invoice
/
{invoice_id}
/
payment
/
{payment_id}
/
void
/
Void Invoice Payment
curl --request POST \
  --url https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/ \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "void_date": "2023-12-25"
}
'
import requests

url = "https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/"

payload = { "void_date": "2023-12-25" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({void_date: '2023-12-25'})
};

fetch('https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'void_date' => '2023-12-25'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/"

payload := strings.NewReader("{\n \"void_date\": \"2023-12-25\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"void_date\": \"2023-12-25\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.meetcampfire.com/coa/api/v1/invoice/{invoice_id}/payment/{payment_id}/void/")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"void_date\": \"2023-12-25\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": 123,
  "credit_memo": "<string>",
  "payment_transaction_bank_description": "<string>",
  "payment_journal_entry_order": "<string>",
  "payment_intercompany_journal": "<string>",
  "voided_journal_entry_order": "<string>",
  "withheld_amount": 123,
  "created_at": "2023-11-07T05:31:56Z",
  "external_id": "<string>",
  "last_modified_at": "2023-11-07T05:31:56Z",
  "customer": 123,
  "invoice": 123,
  "currency": "<string>",
  "amount": 0,
  "payment_date": "2023-12-25",
  "voided_date": "2023-12-25",
  "payment_journal_entry": 123,
  "payment_transaction": 123,
  "fx_gain_loss_realized_transaction": 123,
  "payment_term_discount_transaction": 123,
  "voided_journal_entry": 123,
  "payment_transactions": [
    123
  ]
}

Authorizations

Authorization
string
header
required

Token-based authentication with required prefix "Token"

Path Parameters

invoice_id
integer
required

ID of the invoice

payment_id
integer
required

ID of the payment to void

Body

void_date
string<date> | null

Response

200 - application/json
id
integer
required
read-only
credit_memo
string
required
read-only
payment_transaction_bank_description
string
required
read-only
payment_journal_entry_order
string
required
read-only
payment_intercompany_journal
string
required
read-only
voided_journal_entry_order
string
required
read-only
withheld_amount
number<double> | null
required
read-only

Tax withheld on this payment: sum of the payment's own withholding GL legs.

Summed over the payment's legs (not the invoice's withholding records) so a voided payment still shows what it originally withheld.

created_at
string<date-time>
required
read-only
payment_type
required

Type of payment: credit memo application, bank transaction, or manual transaction

  • CREDIT_MEMO - Credit Memo
  • BANK_TRANSACTION - Bank Transaction
  • MANUAL_TRANSACTION - Manual Transaction
Available options:
CREDIT_MEMO,
BANK_TRANSACTION,
MANUAL_TRANSACTION
external_id
string | null
required

Stable upstream identifier for this payment (e.g. Stripe balance transaction 'btxn_...', Stripe credit note 'cn_...', or the mart's event external_id for customer-balance applications). Used as the natural dedup/idempotency key. Null for manually-entered payments.

Maximum string length: 256
last_modified_at
string<date-time>
required
read-only
customer
integer
required
read-only
invoice
integer
required
currency
string
Maximum string length: 3
amount
number<double>
Required range: -1000000000000000000 < x < 1000000000000000000
payment_date
string<date> | null
voided_date
string<date> | null
source
  • STRIPE - Stripe
  • MANUAL - Manual
Available options:
STRIPE,
MANUAL
payment_journal_entry
integer | null
payment_transaction
integer | null
fx_gain_loss_realized_transaction
integer | null
payment_term_discount_transaction
integer | null
voided_journal_entry
integer | null
payment_transactions
integer[]