Docs menu: Store orders
Store orders
Guides
A store’s connector sends each order and refund as the shop holds it. Tallio maps it to a document, issues it through the merchant’s provider and keeps its state, so the store never builds a document itself.
On this page
Note
Store orders are called with the store’s own restricted key (rk_…), which a store gets when its owner connects it to Tallio. Connect a store explains the keys and what they can call.
Send an order #
When an order is placed or paid, send it with POST /store_orders: the merchant (mer_…) and the order as the platform holds it (lines, taxes, shipping, fees, coupons, payment gateway, buyer). Tallio maps a paid order to a receipt or an invoice and issues it through the merchant’s connection in the key’s mode; a test key without a test connection issues through Tallio’s sandbox. An unpaid order is kept and skipped as order_not_paid: retry it once it is paid.
Send a paid ordercurl "$TALLIO_API_URL/v1/store_orders" \
-H "Authorization: Bearer $TALLIO_STORE_KEY" \
-H "Tallio-Store-Url: https://shop.example" \
-H "Idempotency-Key: store:shop.example:order:1042" \
-H "Content-Type: application/json" \
-d @order.jsonorder.json{
"merchant": "mer_02y9O8rh7F50tGi0QcWRrx",
"order": {
"platform": "woocommerce",
"platform_version": "11.2.1",
"external_id": "1042",
"number": "1042",
"created_at": "2026-10-11T09:30:00.000Z",
"paid_at": "2026-10-11T09:31:00.000Z",
"cancelled": false,
"refunded_total": "0",
"test": false,
"currency": "EUR",
"prices_include_tax": true,
"tax_rounding": "line",
"total": "12.40",
"lines": [
{
"external_id": "17",
"name": "Espresso beans, 1 kg",
"quantity": "1",
"total": "10.00",
"taxes": [
{
"rate_id": "1",
"rate_percent": "24",
"amount": "2.40"
}
],
"gift_card": false
}
],
"shipping_lines": [],
"fee_lines": [],
"coupons": [],
"payment_gateways": [
{
"id": "cod",
"title": "Cash on delivery"
}
]
}
}- One store order per order. Tallio keeps one per merchant, mode, platform and order id. Sending an order it already holds answers that store order with 200 and maps nothing again, so a resend after a lost answer is safe. Use an idempotency key per order too.
- Tallio maps, never the store. Taxes, rounding, payment methods and the buyer are read from the order with the merchant’s store settings. An order Tallio cannot map exactly is skipped with a reason, never issued on a guess.
- Read it back. GET /store_orders/{id} returns the status, the reason and its document, with the number and, in Greece, the MARK once issued. GET /store_orders lists the store orders of the key’s mode, newest first.
Statuses #
pending: received, not yet mapped, or waiting to be sent.skipped: it maps to no document;reasonsays why.sent: its document was created and is on its way to the provider.issued: the document was issued.failed: the document was rejected, failed or cancelled, or Tallio could not create it;reasonsays why.
Every skipped or failed store order carries a machine reason and a detail sentence for the merchant (the table below). warnings lists what is worth knowing about an issued document: a rounding cent, a free line left out, the store’s default payment method used.
Action needed #
A skipped or failed store order that waits for the merchant has action_needed: true, and GET /store_orders?status=action_needed lists them, with the orders whose refund waits. Skips that need nothing (a test order, nothing to invoice, a French sale to report) stay off the list.
- Retry. When
retryableis true, the cause was outside the order (no provider connected, a payment method to choose, the plan’s limit) and is now fixed: POST /store_orders/{id}/retry with the order as the platform holds it now. A failed document is sent again as it was. A retry never makes a second document. - Mark handled. When the merchant issued the document by hand, POST /store_orders/{id}/mark_handled takes the order off the list; its reason stays. Send the reason the merchant saw: if it changed since, the answer is 409
invalid_state, so a newer outcome is never hidden unread.
Refunds #
Send each refund with POST /store_orders/{id}/refunds. Tallio credits exactly what was refunded with a credit note linked to the order’s document: the whole sale, its lines, or an amount on a single-rate sale. A refund sent before the order’s document is issued waits for it. A refund Tallio cannot match is skipped with a reason and waits for the merchant, who issues the credit by hand and marks it handled with POST /store_orders/{id}/refunds/{refundId}/mark_handled. The order’s refunds lists them, each with its credit note.
Invoice requests #
A buyer who wants an invoice gives their VAT number (in France, their SIREN, SIRET or VAT number) and company name. Captured at checkout, they travel in the order’s invoice_request. Asked for after checkout, on the order-received page or in the buyer’s account, they are saved with PUT /store_orders/{id}/invoice_request. The order can be named as platform:external_id before the store sent it, and then reads the request when it arrives. Once the order’s document is made, a request changes nothing (409 already_issued): the merchant reissues the document instead (the correct call below).
Greek invoices and the VAT registry #
Before a Greek invoice is issued, Tallio looks the buyer’s number up in the VAT registry. A number that is not registered skips the order as buyer_vat_not_registered. When the registered name differs from the order’s, or the registry withholds it, or the store’s settings ask to confirm every invoice, the order waits as invoice_awaiting_confirmation:
- POST /store_orders/{id}/invoice_review returns the buyer as the invoice names them beside the registry’s answer. It changes nothing; show both to the merchant.
- When
registry.confirmableis true, POST /store_orders/{id}/confirm_invoice with the order as it is now andregistry_hashissues the invoice with the registered name and address. If the registry changed in between, the order waits again for a new review.
Correct or cancel #
When the merchant edits an issued order, or the buyer’s details change, POST /store_orders/{id}/correct replaces the document with one mapped from the order as it is now. In Greece the original is cancelled in myDATA, or credited in full where it cannot be cancelled; in France it is credited in full and a new invoice is issued. POST /store_orders/{id}/cancel cancels a Greek document for a sale that did not happen; a French invoice is never cancelled, only corrected. The store order’s correctable and cancellable say what Tallio allows now; offer only those actions.
Tallio’s Shopify app and WooCommerce plugin call this action Reissue: the document is not edited, a new one with its own number is issued dated today, and the old one stays on record, cancelled or credited. Name it that way to merchants and ask them to change the order in the shop first.
French numbering #
French invoices and credit notes of store orders are numbered by Tallio, one unbroken series for invoices and one for credit notes, per mode and year, from the prefixes in the merchant’s store settings (PATCH /merchants/{id}/store_settings). A number given to a record that ends with no document is kept as a gap and listed in voided_numbers, so the series can be explained.
Events #
Tallio sends store_order.updated when a store order’s status, reason, handled mark, document or refunds change. Connecting a store creates its webhook endpoints, one per key, scoped to its merchant. Treat the event as a hint: check its signature, then read the store order back. A store whose host blocks inbound requests lists its recent store orders on a timer instead.
Plans and usage #
A store team issues live without a card on the Free plan, up to 50 documents a month, or on a paid store plan chosen by an owner in the dashboard. GET /store_usage returns the plan, the live documents counted this period and the cap, so the store can warn the merchant from 80% of it. Past the cap Tallio still issues 10% more; at that limit new orders are skipped as plan_cap_reached, which the merchant retries once the plan changes or the next period starts. Credit notes, corrections and test-mode documents are never counted.
Erasure #
When a buyer asks to be erased, POST /erasures with store_orders (their ord_… ids) removes the buyer’s personal data Tallio holds about each order: in its documents, its refunds’ credit notes and corrections, the buyer’s invoice request and the requests logged about it. The provider stays the archive of the issued documents.
Reasons #
Every reason a store order or refund can carry, with the detail Tallio sends and what the merchant does about it. Only orders are retried: a refund that waits for the merchant is credited by hand and marked handled.
| Reason | Detail | What the merchant does |
|---|---|---|
non_eur_currency | The store's currency is not the euro. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
test_order | A test order is not a sale, so no document is needed. Nothing to do. | Nothing; off the Action needed list |
non_greek_vat | The sale is taxed outside Greece. No document was issued. Issue it by hand at your provider, or check the order's tax settings. | Issue by hand, then mark handled |
gift_card_line | The order sells a gift card. A multi-purpose gift card is usually not taxed until it is spent; a single-purpose one is. Ask your accountant, and No document was issued. Issue it by hand at your provider if one is due. | Issue by hand, then mark handled |
gift_card_payment | The order was paid with a gift card. No document was issued. Issue it by hand at your provider, with the payment method your accountant uses for gift cards. | Issue by hand, then mark handled |
unmapped_vat_rate | A line has a VAT rate that is not a Greek rate. Check the product's tax settings. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
zero_rated_line | A line carries no VAT and its exemption reason is not known. No document was issued. Issue it by hand at your provider, with the exemption that applies. | Issue by hand, then mark handled |
multiple_tax_rates_on_line | A line carries more than one VAT rate. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
missing_tax_lines | A line has no tax information. Check the product's tax settings. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
totals_mismatch | The order's lines do not add up to its total. No document was issued. Issue it by hand at your provider, checking the amounts first. | Issue by hand, then mark handled |
rounding_out_of_bounds | The order's rounding differs by more than a cent per line. No document was issued. Issue it by hand at your provider, checking the amounts first. | Issue by hand, then mark handled |
no_lines | The order has nothing to invoice (no paid lines). Nothing to do unless you expected a document. | Nothing; off the Action needed list |
too_many_lines | The order has more lines than one document can hold. No document was issued. Issue it by hand at your provider, split into several documents. | Issue by hand, then mark handled |
invalid_quantity | A line's quantity cannot go on a document. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
amount_out_of_range | The order's amounts are beyond what a document can hold. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
empty_description | A line has no title, SKU or product to describe it. Name the product. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
foreign_b2b_manual | The buyer gave a VAT number from another EU country. No document was issued: issue the intra-EU invoice by hand at your provider (1.2 for goods, 2.2 for services). | Issue by hand, then mark handled |
sale_to_report | A sale to a consumer: it is reported, not invoiced. Report it through your e-invoicing platform. | Nothing; off the Action needed list |
foreign_b2b_to_report | A sale to a business outside France: invoice it by hand and report it through your e-invoicing platform. | Issue by hand, then mark handled |
overseas_manual | A sale to a French business in an overseas territory: issue the invoice by hand at your e-invoicing platform. | Issue by hand, then mark handled |
franchise_with_tax | Your store charged VAT on this order, but your business is under the VAT franchise (no VAT number). Correct the taxes in your store and issue the invoice by hand. | Issue by hand, then mark handled |
fr_invoice_request_unusable | The buyer asked for an invoice, but the details can't be used: no valid SIREN or French VAT number, or no company name. Check them with the buyer, who can send them again from the order status page, then press Retry; or issue the invoice by hand at your e-invoicing platform. | Fix the cause, then retry |
negative_fee_line | The order has a negative fee (a discount added by a plugin), which no document line can carry. Give such discounts as coupons. No document was issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
payment_method_unknown | The order's payment gateway does not say how it was paid (for example, it was marked as paid by hand), so no document was issued. In Settings, choose a method under Payment method, then press Retry. Otherwise issue the document by hand at your provider. | Fix the cause, then retry |
unsupported_original_type | The original document is of a kind that is not credited automatically. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
original_customer_missing | The original invoice has no customer to credit. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
invalid_original_mark | The original document's MARK could not be read. Issue the credit by hand at your provider, against the original. | Issue by hand, then mark handled |
amount_only_adjustment | The refund is only an amount adjustment, with no lines. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
order_adjustment_unsupported | The refund includes an order adjustment that is not credited automatically. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
nothing_refunded | The refund returned no money for any line. Nothing to do unless you expected a credit. | Nothing; off the Action needed list |
exceeds_original | The refunds of this order do not match its document (more than it, or a VAT rate it does not have). No document was issued: check the refunds, then issue the credit by hand at your provider. | Issue by hand, then mark handled |
classification_ambiguous | The original document's lines could not be matched to the refund. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
refund_below_lines | Less money was refunded than the lines are worth (a restocking fee?). Issue the credit by hand at your provider for the amount refunded. | Issue by hand, then mark handled |
refund_above_lines | More money was refunded than the lines are worth. Issue the credit by hand at your provider for the amount refunded. | Issue by hand, then mark handled |
refund_without_money | The refund returned no money (a restock only?). Nothing to do unless you expected a credit. | Nothing; off the Action needed list |
refund_pending | The refund was not settled when it arrived, so no credit was issued. Once your store shows it settled, issue the credit by hand at your provider. | Issue by hand, then mark handled |
refund_not_mappable | The refund could not be matched to the sale's document, so no credit note was issued. Issue the credit by hand at your provider. | Issue by hand, then mark handled |
amount_only_refund | The refund is an amount with no items, and the sale has more than one VAT rate, so its VAT cannot be told. Refund by item in your store instead, or issue the credit by hand at your provider. | Issue by hand, then mark handled |
order_cancelled | The order was cancelled before its document was made, so none was issued. Issue one by hand at your provider only if the sale went ahead. | Issue by hand, then mark handled |
fr_numbering_pending | This invoice is held. Tallio issues it automatically with its French invoice number. There is nothing to do, and do not issue it by hand. | Nothing; off the Action needed list |
snapshot_outdated | The order reached Tallio from an earlier version of the store connector, in a form Tallio no longer reads. No document was issued. Issue it by hand at your provider. | Fix the cause, then retry |
order_not_paid | The order was no longer marked paid when its document was due, so none was issued. Once it is paid, press Retry, or issue the document by hand at your provider. | Fix the cause, then retry |
merchant_tax_id_missing | Your Tallio account has no ΑΦΜ (VAT number), and a document needs one, so none was issued. Contact Tallio support to add it, then press Retry, or issue the document by hand at your provider. | Fix the cause, then retry |
merchant_legal_id_missing | Your business in Tallio has no SIREN, and an invoice needs one, so none was issued. Contact Tallio support to add it, then press Retry, or issue the invoice by hand at your e-invoicing platform. | Fix the cause, then retry |
merchant_regime_unsupported | The app held this order under an earlier setup, so no document was issued. Press Retry to issue it, or issue it by hand at your provider. | Fix the cause, then retry |
fr_settings_missing | Choose what your invoices cover (goods, services or both) in the French invoices section of Settings, then press Retry. | Fix the cause, then retry |
number_taken | This invoice number is already used for your business in Tallio. Change the invoice number prefix in the French invoices section of Settings, then press Retry. | Fix the cause, then retry |
credit_number_taken | This credit note number is already used for your business in Tallio. Change the credit note prefix in the French invoices section of Settings, and give credit notes you issue by hand a prefix of their own so they never meet Tallio's numbers. Then press Retry, or issue this credit note by hand. | Fix the cause, then retry |
provider_not_connected | No e-invoicing provider was connected, or the provider refused its credentials, so no document was issued. Connect it again in Settings, then press Retry, or issue the document by hand at your provider. | Fix the cause, then retry |
refunded_before_issue | The order was refunded before its document was made, so none was issued. Issue the sale and its credit by hand at your provider. | Issue by hand, then mark handled |
tallio_refused | Tallio refused the document, so none was issued. If the cause was outside this order (for example in Settings), fix it and press Retry; otherwise issue it by hand at your provider. | Fix the cause, then retry |
plan_cap_reached | Your plan reached this period's document limit, so no document was issued. Choose a larger plan, or wait for the next period, then press Retry. The document is dated the day you press it. You can also issue it by hand at your provider if the order shows no document in Tallio. | Fix the cause, then retry |
original_not_issued | The refunded sale has no document issued by this app, so no credit note was made. Once the sale's document is issued, press Retry. Otherwise issue the credit by hand at your provider. | Nothing; credited once the order’s document is issued |
original_cancelled | The sale's document was cancelled in Tallio, so no credit note was made. Credit the refund by hand at your provider if needed. | Issue by hand, then mark handled |
original_not_creditable | Tallio would not credit the sale's document: it is credited already, or it was not issued through Tallio. Check the sale's documents at your provider, and issue the credit there by hand if none exists. | Issue by hand, then mark handled |
original_refused | The buyer refused the sale's invoice (status 210, Refusée) or the platform rejected it (213, Rejetée), so no credit note (avoir) is issued for it. Cancel the invoice in your accounts, and if the sale goes ahead, issue a new invoice at your e-invoicing platform. | Issue by hand, then mark handled |
refund_expired | The refunded sale has had no document for too long, or will never have one, so Tallio no longer keeps this refund to credit it. If the sale's document is issued, credit the refund by hand at your provider. | Issue by hand, then mark handled |
partial_refund | The app did not credit this refund. Credit it by hand at your provider. | Issue by hand, then mark handled |
credit_exceeds_balance | The refund is more than what is left to credit on the sale's document, so no credit note was issued. Check the earlier credit notes at your provider. | Issue by hand, then mark handled |
buyer_vat_not_registered | The VAT registry has no active registration for the buyer's VAT number (ΑΦΜ), so no invoice was issued. Check the number with the buyer. Once it is registered, or the buyer sends a corrected one, press Retry. Otherwise issue a retail receipt by hand at your provider. | Fix the cause, then retry |
invoice_awaiting_confirmation | The buyer's VAT number (ΑΦΜ) is registered, and the invoice waits for you: the registry's name differs from the buyer's, the registry shares no name, or your settings ask to confirm every invoice. Open Review to compare them and issue the invoice with the registered details, or issue it by hand at your provider. | Review and confirm |
job_failed | The document could not be confirmed after several attempts, and Tallio may already hold it. Press Retry: Tallio recognises a document it already holds and returns it rather than issuing it twice. Issue it by hand at your provider only if the order shows no document in Tallio; if this keeps happening, contact us. | Fix the cause, then retry |
document_rejected | Your provider or the tax administration rejected the document Tallio sent, so it was not issued. Details shows their answer. Correct the document at your provider, or issue it by hand there. | Issue by hand, then mark handled |
document_retries_exhausted | The provider refused this document after several attempts, so it was not issued. Issue it by hand at your provider. | Issue by hand, then mark handled |
document_cancelled | The document was cancelled in Tallio, so this order or refund has no document. If the sale stands, issue a new one at your provider. | Nothing; the cancel marked it handled |
document_invalid | Tallio did not send this document: it cannot be sent as it is, and Details shows why. Sending the same document again gets the same answer, so issue it by hand at your provider. | Issue by hand, then mark handled |
document_failed | Tallio could not issue this document through your provider. Details shows the provider's answer. Check your provider connection in Settings, then press Retry, or issue the document by hand at your provider. | Fix the cause, then retry |