Skip to content

Request a Peppol invoice copy

POST /api/v2/billing/invoices/{id}/actions/resend-peppol

Send a copy of an unpaid e-invoice again through Peppol, to the recipient the original went to. Read GET /api/v2/billing/invoices/{id}/email-info first. peppol.delivery.resend.allowed must be true. Send its peppol.delivery.recipient.id and peppol.delivery.transactionId with a new requestId. The copy is the same invoice. It creates no new invoice and does not change future delivery settings. Follow the copy in peppol.delivery.attempts on the same delivery history. For a paid invoice, use POST /api/v2/billing/invoices/{id}/actions/resend-email instead.

Authentication: An API key with the scope write:billing. About keys and scopes

Request

Path parameters

idstringrequired
Public invoice ID from GET /api/v2/billing/invoices (inv_…).

Body

requestIdstringrequired
A UUID you create for this copy. Reuse it to retry the same request.
recipientIdstringrequired
peppol.delivery.recipient.id from the delivery history.
transactionIdstring or nullrequired
peppol.delivery.transactionId from the delivery history. Null when it is null there.

Example

POST /api/v2/billing/invoices/{id}/actions/resend-peppol
curl -X POST "https://cloud.hostup.se/api/v2/billing/invoices/inv_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/resend-peppol" \
-H "Authorization: Bearer $HOSTUP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"requestId": "3f2b6c1e-8d4a-4b7f-9c2e-5a1d0f6e7b8c",
"recipientId": "0007:0000000000",
"transactionId": "4b1f7c2e-9a3d-4e6f-8b2a-1c5d7e9f0a3b"
}'

Responses

200 The copy request, new or the earlier one with the same requestId.

Response 200
{
"requestId": "3f2b6c1e-8d4a-4b7f-9c2e-5a1d0f6e7b8c",
"status": "queued",
"queuedAt": "2026-09-16T14:02:11.000Z"
}
Response fields
requestIdstring
statusstring
One of queued, sending, sent, failed, unknown.
queuedAtstring

Errors

Errors are Problem Details with a stable code. Branch on the code, not on the text.

400invalid_request: requestId must be a UUID. recipientId and transactionId must be the values from the delivery history.
401Authentication is required.
403Forbidden. The caller lacks a required scope or does not own the resource.
404invoice_not_found: no such invoice on this account.
409peppol_invoice_not_unpaid: the invoice is no longer unpaid. invoice_not_ready: the invoice is still being finalized. peppol_delivery_changed: recipientId or transactionId no longer match the delivery history. Other peppol_ codes mean a copy cannot be requested now. Read the delivery history again before retrying.
429peppol_rate_limited: too many copies were requested for this invoice. Try again later.
500Internal error. Retry later or contact support if the issue persists.
503The copy could not be confirmed (peppol_result_unknown or another peppol_ code). Read the delivery history before trying again.