Skip to content

Refunds ​

Part of the Accounts API. Base URL https://your-domain.com/admin/api/v1 — replace the host with your own installation and the token placeholder with a real Bearer token (see Authentication).

List refunds ​

GET /admin/api/v1/accounts/refunds

Retrieve a paginated list of vendor refunds with filtering and sorting

🔒 Requires a valid Bearer token.

Query parameters

ParameterTypeRequiredDescriptionExample
includestringNoComma-separated list of relationships to include. Available options: partner, currency, journal, company, invoicePaymentTerm, fiscalPosition, invoiceUser, partnerShipping, partnerBank, invoiceIncoterm, invoiceCashRounding, paymentMethodLine, campaign, source, medium, creator, invoiceLines, invoiceLines.product, invoiceLines.uom, invoiceLines.taxes, invoiceLines.account, invoiceLines.currency, invoiceLines.companyCurrency, invoiceLines.partner, invoiceLines.creator, invoiceLines.journal, invoiceLines.company, invoiceLines.groupTax, invoiceLines.taxGroup, invoiceLines.payment, invoiceLines.taxRepartitionLinepartner,invoiceLines.product
filter[id]stringNoComma-separated list of IDs to filter by
filter[name]stringNoFilter by refund number (partial match)
filter[partner_id]stringNoComma-separated list of partner IDs to filter by
filter[state]stringNoFilter by state (draft, posted, cancel)
filter[payment_state]stringNoFilter by payment state
sortstringYesSort fieldinvoice_date
pageintegerYesPage number1
bash
curl -X GET "https://your-domain.com/admin/api/v1/accounts/refunds?include=partner%2CinvoiceLines.product&sort=invoice_date&page=1" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds?include=partner%2CinvoiceLines.product&sort=invoice_date&page=1", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://your-domain.com/admin/api/v1/accounts/refunds?include=partner%2CinvoiceLines.product&sort=invoice_date&page=1', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds?include=partner%2CinvoiceLines.product&sort=invoice_date&page=1"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

response = requests.get(url, headers=headers)

data = response.json()
print(data)

Example response 200

json
{
  "data": [
    {
      "id": 1,
      "sort": 1,
      "journal_id": 2,
      "company_id": 1,
      "campaign_id": null,
      "tax_cash_basis_origin_move_id": null,
      "auto_post_origin_id": null,
      "origin_payment_id": null,
      "secure_sequence_number": null,
      "invoice_payment_term_id": 1,
      "partner_id": 3,
      "commercial_partner_id": 3,
      "partner_shipping_id": 3,
      "partner_bank_id": null,
      "fiscal_position_id": null,
      "currency_id": 20,
      "reversed_entry_id": null,
      "invoice_user_id": null,
      "invoice_incoterm_id": null,
      "invoice_cash_rounding_id": null,
      "preferred_payment_method_line_id": null,
      "creator_id": 1,
      "sequence_prefix": "BILL/2026",
      "access_token": null,
      "name": "BILL/2026/00001",
      "reference": null,
      "state": "posted",
      "move_type": "in_invoice",
      "auto_post": 0,
      "inalterable_hash": null,
      "payment_reference": null,
      "qr_code_method": null,
      "payment_state": "not_paid",
      "invoice_source_email": null,
      "invoice_partner_display_name": "Sagar(Vendor)",
      "invoice_origin": "PO/00002",
      "incoterm_location": null,
      "date": "2026-10-09T00:00:00.000000Z",
      "auto_post_until": null,
      "invoice_date": "2026-10-08T00:00:00.000000Z",
      "invoice_date_due": "2026-10-08T00:00:00.000000Z",
      "delivery_date": null,
      "sending_data": null,
      "narration": "<p></p>",
      "invoice_currency_rate": "1.0000",
      "amount_untaxed": "2200.0000",
      "amount_tax": "0.0000",
      "amount_total": "2200.0000",
      "amount_residual": "2200.0000",
      "amount_untaxed_signed": "-2200.0000",
      "amount_untaxed_in_currency_signed": "-2200.0000",
      "amount_tax_signed": "0.0000",
      "amount_total_signed": "-2200.0000",
      "amount_total_in_currency_signed": "-2200.0000",
      "amount_residual_signed": "-2200.0000",
      "quick_edit_total_amount": null,
      "is_storno": 0,
      "always_tax_exigible": 0,
      "checked": true,
      "posted_before": 1,
      "made_sequence_gap": 0,
      "is_manually_modified": 0,
      "is_move_sent": 0,
      "source_id": null,
      "medium_id": null,
      "created_at": "2026-10-09T12:16:14.000000Z",
      "updated_at": "2026-10-09T12:18:43.000000Z"
    },
    {
      "id": 1,
      "sort": 1,
      "journal_id": 2,
      "company_id": 1,
      "campaign_id": null,
      "tax_cash_basis_origin_move_id": null,
      "auto_post_origin_id": null,
      "origin_payment_id": null,
      "secure_sequence_number": null,
      "invoice_payment_term_id": 1,
      "partner_id": 3,
      "commercial_partner_id": 3,
      "partner_shipping_id": 3,
      "partner_bank_id": null,
      "fiscal_position_id": null,
      "currency_id": 20,
      "reversed_entry_id": null,
      "invoice_user_id": null,
      "invoice_incoterm_id": null,
      "invoice_cash_rounding_id": null,
      "preferred_payment_method_line_id": null,
      "creator_id": 1,
      "sequence_prefix": "BILL/2026",
      "access_token": null,
      "name": "BILL/2026/00001",
      "reference": null,
      "state": "posted",
      "move_type": "in_invoice",
      "auto_post": 0,
      "inalterable_hash": null,
      "payment_reference": null,
      "qr_code_method": null,
      "payment_state": "not_paid",
      "invoice_source_email": null,
      "invoice_partner_display_name": "Sagar(Vendor)",
      "invoice_origin": "PO/00002",
      "incoterm_location": null,
      "date": "2026-10-09T00:00:00.000000Z",
      "auto_post_until": null,
      "invoice_date": "2026-10-08T00:00:00.000000Z",
      "invoice_date_due": "2026-10-08T00:00:00.000000Z",
      "delivery_date": null,
      "sending_data": null,
      "narration": "<p></p>",
      "invoice_currency_rate": "1.0000",
      "amount_untaxed": "2200.0000",
      "amount_tax": "0.0000",
      "amount_total": "2200.0000",
      "amount_residual": "2200.0000",
      "amount_untaxed_signed": "-2200.0000",
      "amount_untaxed_in_currency_signed": "-2200.0000",
      "amount_tax_signed": "0.0000",
      "amount_total_signed": "-2200.0000",
      "amount_total_in_currency_signed": "-2200.0000",
      "amount_residual_signed": "-2200.0000",
      "quick_edit_total_amount": null,
      "is_storno": 0,
      "always_tax_exigible": 0,
      "checked": true,
      "posted_before": 1,
      "made_sequence_gap": 0,
      "is_manually_modified": 0,
      "is_move_sent": 0,
      "source_id": null,
      "medium_id": null,
      "created_at": "2026-10-09T12:16:14.000000Z",
      "updated_at": "2026-10-09T12:18:43.000000Z"
    }
  ],
  "links": {
    "first": "/?page=1",
    "last": "/?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "page": null,
        "active": false
      },
      {
        "url": "/?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "page": null,
        "active": false
      }
    ],
    "path": "/",
    "per_page": 10,
    "to": 2,
    "total": 2
  }
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Create refund ​

POST /admin/api/v1/accounts/refunds

Create a new vendor refund

🔒 Requires a valid Bearer token.

Body parameters

ParameterTypeRequiredDescription
partner_idintegerYesThe vendor/partner ID. Must match an existing stored value.
currency_idintegerYesThe currency ID. Must match an existing stored value.
journal_idintegerYesThe journal ID for bills. Must match an existing stored value.
invoice_datestringYesThe invoice date. Must be a valid date.
invoice_date_duestringNoThe invoice due date. Cannot be provided if invoice_payment_term_id is specified. Must be a valid date.
invoice_payment_term_idintegerNoThe payment term ID. Cannot be provided if invoice_date_due is specified. Must match an existing stored value.
fiscal_position_idintegerNoThe fiscal position ID. Must match an existing stored value.
invoice_user_idintegerNoThe salesperson/user ID. Must match an existing stored value.
partner_bank_idintegerNoThe recipient bank account ID. Must match an existing stored value.
invoice_incoterm_idintegerNoThe incoterm ID. Must match an existing stored value.
invoice_cash_rounding_idintegerNoThe cash rounding ID. Must match an existing stored value.
preferred_payment_method_line_idintegerNoThe preferred payment method line ID. Must match an existing stored value.
referencestringNoThe vendor bill reference. Must not be greater than 255 characters.
payment_referencestringNoThe payment reference. Must not be greater than 255 characters.
narrationstringNoTerms and conditions / Internal notes.
incoterm_locationstringNoThe incoterm location. Must not be greater than 255 characters.
delivery_datestringNoThe delivery date. Must be a valid date.
invoice_linesobject[]YesArray of invoice line items with product details, quantities, prices, and taxes. Must have at least 1 items.
datestringNoThe accounting date. Must be a valid date.
invoice_lines[].product_idintegerYesMust match an existing stored value.
invoice_lines[].quantitynumberYesMust be at least 0.0001.
invoice_lines[].uom_idintegerYesMust match an existing stored value.
invoice_lines[].price_unitnumberYes
invoice_lines[].discountnumberNoMust be at least 0. Must not be greater than 100.
invoice_lines[].taxesinteger[]NoMust match an existing stored value.
invoice_lines[].idintegerNoMust match an existing stored value.
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "partner_id": 1,
  "currency_id": 1,
  "journal_id": 1,
  "invoice_date": "2026-02-16",
  "invoice_date_due": "2026-03-16",
  "invoice_payment_term_id": 1,
  "fiscal_position_id": 1,
  "invoice_user_id": 1,
  "partner_bank_id": 1,
  "invoice_incoterm_id": 1,
  "invoice_cash_rounding_id": 1,
  "preferred_payment_method_line_id": 1,
  "reference": "INV-2026-001",
  "payment_reference": "PAY-001",
  "narration": "Additional information",
  "incoterm_location": "New York",
  "delivery_date": "2026-02-20",
  "invoice_lines": [
    {
      "product_id": 1,
      "quantity": 2,
      "uom_id": 1,
      "price_unit": 100,
      "discount": 10,
      "taxes": [
        1,
        2
      ]
    }
  ],
  "date": "2026-02-17"
}'
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "partner_id": 1,
  "currency_id": 1,
  "journal_id": 1,
  "invoice_date": "2026-02-16",
  "invoice_date_due": "2026-03-16",
  "invoice_payment_term_id": 1,
  "fiscal_position_id": 1,
  "invoice_user_id": 1,
  "partner_bank_id": 1,
  "invoice_incoterm_id": 1,
  "invoice_cash_rounding_id": 1,
  "preferred_payment_method_line_id": 1,
  "reference": "INV-2026-001",
  "payment_reference": "PAY-001",
  "narration": "Additional information",
  "incoterm_location": "New York",
  "delivery_date": "2026-02-20",
  "invoice_lines": [
    {
      "product_id": 1,
      "quantity": 2,
      "uom_id": 1,
      "price_unit": 100,
      "discount": 10,
      "taxes": [
        1,
        2
      ]
    }
  ],
  "date": "2026-02-17"
}),
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'partner_id' => 1,
    'currency_id' => 1,
    'journal_id' => 1,
    'invoice_date' => '2026-02-16',
    'invoice_date_due' => '2026-03-16',
    'invoice_payment_term_id' => 1,
    'fiscal_position_id' => 1,
    'invoice_user_id' => 1,
    'partner_bank_id' => 1,
    'invoice_incoterm_id' => 1,
    'invoice_cash_rounding_id' => 1,
    'preferred_payment_method_line_id' => 1,
    'reference' => 'INV-2026-001',
    'payment_reference' => 'PAY-001',
    'narration' => 'Additional information',
    'incoterm_location' => 'New York',
    'delivery_date' => '2026-02-20',
    'invoice_lines' => [
      [
        'product_id' => 1,
        'quantity' => 2,
        'uom_id' => 1,
        'price_unit' => 100,
        'discount' => 10,
        'taxes' => [
          1,
          2,
        ],
      ],
    ],
    'date' => '2026-02-17',
  ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

payload = {
    "partner_id": 1,
    "currency_id": 1,
    "journal_id": 1,
    "invoice_date": "2026-02-16",
    "invoice_date_due": "2026-03-16",
    "invoice_payment_term_id": 1,
    "fiscal_position_id": 1,
    "invoice_user_id": 1,
    "partner_bank_id": 1,
    "invoice_incoterm_id": 1,
    "invoice_cash_rounding_id": 1,
    "preferred_payment_method_line_id": 1,
    "reference": "INV-2026-001",
    "payment_reference": "PAY-001",
    "narration": "Additional information",
    "incoterm_location": "New York",
    "delivery_date": "2026-02-20",
    "invoice_lines": [
        {
            "product_id": 1,
            "quantity": 2,
            "uom_id": 1,
            "price_unit": 100,
            "discount": 10,
            "taxes": [
                1,
                2,
            ],
        },
    ],
    "date": "2026-02-17",
}

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

data = response.json()
print(data)

Example response 201

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund created successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Show refund ​

GET /admin/api/v1/accounts/refunds/{id}

Retrieve a specific refund by its ID

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID

Query parameters

ParameterTypeRequiredDescriptionExample
includestringNoComma-separated list of relationships to include. Available options: partner, currency, journal, company, invoicePaymentTerm, fiscalPosition, invoiceUser, partnerShipping, partnerBank, invoiceIncoterm, invoiceCashRounding, paymentMethodLine, campaign, source, medium, creator, invoiceLines, invoiceLines.product, invoiceLines.uom, invoiceLines.taxes, invoiceLines.account, invoiceLines.currency, invoiceLines.companyCurrency, invoiceLines.partner, invoiceLines.creator, invoiceLines.journal, invoiceLines.company, invoiceLines.groupTax, invoiceLines.taxGroup, invoiceLines.payment, invoiceLines.taxRepartitionLinepartner,invoiceLines
bash
curl -X GET "https://your-domain.com/admin/api/v1/accounts/refunds/{id}?include=partner%2CinvoiceLines" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}?include=partner%2CinvoiceLines", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}?include=partner%2CinvoiceLines', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}?include=partner%2CinvoiceLines"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

response = requests.get(url, headers=headers)

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  }
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Update refund ​

PUT /admin/api/v1/accounts/refunds/{id}

Update an existing refund

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID

Body parameters

ParameterTypeRequiredDescription
partner_idintegerNoThe vendor/partner ID. Must match an existing stored value.
currency_idintegerNoThe currency ID. Must match an existing stored value.
journal_idintegerNoThe journal ID for bills. Must match an existing stored value.
invoice_datestringNoThe invoice date. Must be a valid date.
invoice_date_duestringNoThe invoice due date. Cannot be provided if invoice_payment_term_id is specified. Must be a valid date.
invoice_payment_term_idintegerNoThe payment term ID. Cannot be provided if invoice_date_due is specified. Must match an existing stored value.
fiscal_position_idintegerNoThe fiscal position ID. Must match an existing stored value.
invoice_user_idintegerNoThe salesperson/user ID. Must match an existing stored value.
partner_bank_idintegerNoThe recipient bank account ID. Must match an existing stored value.
invoice_incoterm_idintegerNoThe incoterm ID. Must match an existing stored value.
invoice_cash_rounding_idintegerNoThe cash rounding ID. Must match an existing stored value.
preferred_payment_method_line_idintegerNoThe preferred payment method line ID. Must match an existing stored value.
referencestringNoThe vendor bill reference. Must not be greater than 255 characters.
payment_referencestringNoThe payment reference. Must not be greater than 255 characters.
narrationstringNoTerms and conditions / Internal notes.
incoterm_locationstringNoThe incoterm location. Must not be greater than 255 characters.
delivery_datestringNoThe delivery date. Must be a valid date.
invoice_linesobject[]NoArray of invoice line items with product details, quantities, prices, and taxes. Must have at least 1 items.
datestringNoThe accounting date. Must be a valid date.
invoice_lines[].product_idintegerYesMust match an existing stored value.
invoice_lines[].quantitynumberYesMust be at least 0.0001.
invoice_lines[].uom_idintegerYesMust match an existing stored value.
invoice_lines[].price_unitnumberYes
invoice_lines[].discountnumberNoMust be at least 0. Must not be greater than 100.
invoice_lines[].taxesinteger[]NoMust match an existing stored value.
invoice_lines[].idintegerNoMust match an existing stored value.
bash
curl -X PUT "https://your-domain.com/admin/api/v1/accounts/refunds/{id}" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "partner_id": 1,
  "currency_id": 1,
  "journal_id": 1,
  "invoice_date": "2026-02-16",
  "invoice_date_due": "2026-03-16",
  "invoice_payment_term_id": 1,
  "fiscal_position_id": 1,
  "invoice_user_id": 1,
  "partner_bank_id": 1,
  "invoice_incoterm_id": 1,
  "invoice_cash_rounding_id": 1,
  "preferred_payment_method_line_id": 1,
  "reference": "INV-2026-001",
  "payment_reference": "PAY-001",
  "narration": "Additional information",
  "incoterm_location": "New York",
  "delivery_date": "2026-02-20",
  "invoice_lines": [
    {
      "product_id": 1,
      "quantity": 2,
      "uom_id": 1,
      "price_unit": 100,
      "discount": 10,
      "taxes": [
        1,
        2
      ]
    }
  ],
  "date": "2026-02-17"
}'
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}", {
  method: "PUT",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "partner_id": 1,
  "currency_id": 1,
  "journal_id": 1,
  "invoice_date": "2026-02-16",
  "invoice_date_due": "2026-03-16",
  "invoice_payment_term_id": 1,
  "fiscal_position_id": 1,
  "invoice_user_id": 1,
  "partner_bank_id": 1,
  "invoice_incoterm_id": 1,
  "invoice_cash_rounding_id": 1,
  "preferred_payment_method_line_id": 1,
  "reference": "INV-2026-001",
  "payment_reference": "PAY-001",
  "narration": "Additional information",
  "incoterm_location": "New York",
  "delivery_date": "2026-02-20",
  "invoice_lines": [
    {
      "product_id": 1,
      "quantity": 2,
      "uom_id": 1,
      "price_unit": 100,
      "discount": 10,
      "taxes": [
        1,
        2
      ]
    }
  ],
  "date": "2026-02-17"
}),
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'partner_id' => 1,
    'currency_id' => 1,
    'journal_id' => 1,
    'invoice_date' => '2026-02-16',
    'invoice_date_due' => '2026-03-16',
    'invoice_payment_term_id' => 1,
    'fiscal_position_id' => 1,
    'invoice_user_id' => 1,
    'partner_bank_id' => 1,
    'invoice_incoterm_id' => 1,
    'invoice_cash_rounding_id' => 1,
    'preferred_payment_method_line_id' => 1,
    'reference' => 'INV-2026-001',
    'payment_reference' => 'PAY-001',
    'narration' => 'Additional information',
    'incoterm_location' => 'New York',
    'delivery_date' => '2026-02-20',
    'invoice_lines' => [
      [
        'product_id' => 1,
        'quantity' => 2,
        'uom_id' => 1,
        'price_unit' => 100,
        'discount' => 10,
        'taxes' => [
          1,
          2,
        ],
      ],
    ],
    'date' => '2026-02-17',
  ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

payload = {
    "partner_id": 1,
    "currency_id": 1,
    "journal_id": 1,
    "invoice_date": "2026-02-16",
    "invoice_date_due": "2026-03-16",
    "invoice_payment_term_id": 1,
    "fiscal_position_id": 1,
    "invoice_user_id": 1,
    "partner_bank_id": 1,
    "invoice_incoterm_id": 1,
    "invoice_cash_rounding_id": 1,
    "preferred_payment_method_line_id": 1,
    "reference": "INV-2026-001",
    "payment_reference": "PAY-001",
    "narration": "Additional information",
    "incoterm_location": "New York",
    "delivery_date": "2026-02-20",
    "invoice_lines": [
        {
            "product_id": 1,
            "quantity": 2,
            "uom_id": 1,
            "price_unit": 100,
            "discount": 10,
            "taxes": [
                1,
                2,
            ],
        },
    ],
    "date": "2026-02-17",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund updated successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Delete refund ​

DELETE /admin/api/v1/accounts/refunds/{id}

Delete a refund (only draft refunds)

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID
bash
curl -X DELETE "https://your-domain.com/admin/api/v1/accounts/refunds/{id}" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}", {
  method: "DELETE",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('DELETE', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

response = requests.delete(url, headers=headers)

data = response.json()
print(data)

Example response 200

json
{
  "message": "Refund deleted successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Confirm refund ​

POST /admin/api/v1/accounts/refunds/{id}/confirm

Confirm a draft refund and move it to posted state

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/confirm" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}/confirm", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}/confirm', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/confirm"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund confirmed successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Cancel refund ​

POST /admin/api/v1/accounts/refunds/{id}/cancel

Cancel a draft refund

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/cancel" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}/cancel", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}/cancel', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/cancel"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund cancelled successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Pay refund ​

POST /admin/api/v1/accounts/refunds/{id}/pay

Register payment for a posted refund

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID

Body parameters

ParameterTypeRequiredDescription
journal_idintegerNoPayment journal ID. If omitted, the first available journal is used. Must match an existing stored value.
payment_method_line_idintegerNoPayment method line ID for selected journal. If omitted, default method is auto-detected. Must match an existing stored value.
partner_bank_idintegerNoPartner bank account ID when required by payment method. Must match an existing stored value.
currency_idintegerNoPayment currency ID. If omitted, journal currency or document currency is used. Must match an existing stored value.
payment_datestringNoPayment date. Must be a valid date.
communicationstringNoPayment reference/communication. Must not be greater than 255 characters.
installments_modestringNoInstallment mode.
amountnumberNoPayment amount. Must be at least 0.0001.
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/pay" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "journal_id": 1,
  "payment_method_line_id": 1,
  "partner_bank_id": 3,
  "currency_id": 1,
  "payment_date": "2026-02-17",
  "communication": "INV/2026/0001",
  "installments_mode": "full",
  "amount": 250.75
}'
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}/pay", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "journal_id": 1,
  "payment_method_line_id": 1,
  "partner_bank_id": 3,
  "currency_id": 1,
  "payment_date": "2026-02-17",
  "communication": "INV/2026/0001",
  "installments_mode": "full",
  "amount": 250.75
}),
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}/pay', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'journal_id' => 1,
    'payment_method_line_id' => 1,
    'partner_bank_id' => 3,
    'currency_id' => 1,
    'payment_date' => '2026-02-17',
    'communication' => 'INV/2026/0001',
    'installments_mode' => 'full',
    'amount' => 250.75,
  ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/pay"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

payload = {
    "journal_id": 1,
    "payment_method_line_id": 1,
    "partner_bank_id": 3,
    "currency_id": 1,
    "payment_date": "2026-02-17",
    "communication": "INV/2026/0001",
    "installments_mode": "full",
    "amount": 250.75,
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund payment registered successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Reset refund to draft ​

POST /admin/api/v1/accounts/refunds/{id}/reset-to-draft

Reset a posted or cancelled refund to draft

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/reset-to-draft" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}/reset-to-draft", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}/reset-to-draft', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/reset-to-draft"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund reset to draft successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Set refund as checked ​

POST /admin/api/v1/accounts/refunds/{id}/set-as-checked

Mark a refund as checked

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe refund ID
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/set-as-checked" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/refunds/{id}/set-as-checked", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/refunds/{id}/set-as-checked', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/refunds/{id}/set-as-checked"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "sort": 1,
    "journal_id": 2,
    "company_id": 1,
    "campaign_id": null,
    "tax_cash_basis_origin_move_id": null,
    "auto_post_origin_id": null,
    "origin_payment_id": null,
    "secure_sequence_number": null,
    "invoice_payment_term_id": 1,
    "partner_id": 3,
    "commercial_partner_id": 3,
    "partner_shipping_id": 3,
    "partner_bank_id": null,
    "fiscal_position_id": null,
    "currency_id": 20,
    "reversed_entry_id": null,
    "invoice_user_id": null,
    "invoice_incoterm_id": null,
    "invoice_cash_rounding_id": null,
    "preferred_payment_method_line_id": null,
    "creator_id": 1,
    "sequence_prefix": "BILL/2026",
    "access_token": null,
    "name": "BILL/2026/00001",
    "reference": null,
    "state": "posted",
    "move_type": "in_invoice",
    "auto_post": 0,
    "inalterable_hash": null,
    "payment_reference": null,
    "qr_code_method": null,
    "payment_state": "not_paid",
    "invoice_source_email": null,
    "invoice_partner_display_name": "Sagar(Vendor)",
    "invoice_origin": "PO/00002",
    "incoterm_location": null,
    "date": "2026-10-09T00:00:00.000000Z",
    "auto_post_until": null,
    "invoice_date": "2026-10-08T00:00:00.000000Z",
    "invoice_date_due": "2026-10-08T00:00:00.000000Z",
    "delivery_date": null,
    "sending_data": null,
    "narration": "<p></p>",
    "invoice_currency_rate": "1.0000",
    "amount_untaxed": "2200.0000",
    "amount_tax": "0.0000",
    "amount_total": "2200.0000",
    "amount_residual": "2200.0000",
    "amount_untaxed_signed": "-2200.0000",
    "amount_untaxed_in_currency_signed": "-2200.0000",
    "amount_tax_signed": "0.0000",
    "amount_total_signed": "-2200.0000",
    "amount_total_in_currency_signed": "-2200.0000",
    "amount_residual_signed": "-2200.0000",
    "quick_edit_total_amount": null,
    "is_storno": 0,
    "always_tax_exigible": 0,
    "checked": true,
    "posted_before": 1,
    "made_sequence_gap": 0,
    "is_manually_modified": 0,
    "is_move_sent": 0,
    "source_id": null,
    "medium_id": null,
    "created_at": "2026-10-09T12:16:14.000000Z",
    "updated_at": "2026-10-09T12:18:43.000000Z"
  },
  "message": "Refund marked as checked successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Released under the MIT License.