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
idstringrequiredGET /api/v2/billing/invoices (inv_…).Body
requestIdstringrequiredrecipientIdstringrequiredpeppol.delivery.recipient.id from the delivery history.transactionIdstring or nullrequiredpeppol.delivery.transactionId from the delivery history. Null when it is null there.Example
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.
{ "requestId": "3f2b6c1e-8d4a-4b7f-9c2e-5a1d0f6e7b8c", "status": "queued", "queuedAt": "2026-09-16T14:02:11.000Z"}Response fields
requestIdstringstatusstringqueued, sending, sent, failed, unknown.queuedAtstringErrors
Errors are Problem Details with a stable code. Branch on the code, not on the text.
| 400 | invalid_request: requestId must be a UUID. recipientId and transactionId must be the values from the delivery history. |
| 401 | Authentication is required. |
| 403 | Forbidden. The caller lacks a required scope or does not own the resource. |
| 404 | invoice_not_found: no such invoice on this account. |
| 409 | peppol_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. |
| 429 | peppol_rate_limited: too many copies were requested for this invoice. Try again later. |
| 500 | Internal error. Retry later or contact support if the issue persists. |
| 503 | The copy could not be confirmed (peppol_result_unknown or another peppol_ code). Read the delivery history before trying again. |