Skip to content
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 order
curl "$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.json
order.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; reason says 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; reason says 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 retryable is 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.confirmable is true, POST /store_orders/{id}/confirm_invoice with the order as it is now and registry_hash issues 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.

Store order and refund reasons
ReasonDetailWhat the merchant does
non_eur_currencyThe 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_orderA test order is not a sale, so no document is needed. Nothing to do.Nothing; off the Action needed list
non_greek_vatThe 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_lineThe 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_paymentThe 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_rateA 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_lineA 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_lineA 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_linesA 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_mismatchThe 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_boundsThe 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_linesThe order has nothing to invoice (no paid lines). Nothing to do unless you expected a document.Nothing; off the Action needed list
too_many_linesThe 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_quantityA 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_rangeThe 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_descriptionA 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_manualThe 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_reportA 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_reportA 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_manualA 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_taxYour 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_unusableThe 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_lineThe 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_unknownThe 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_typeThe 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_missingThe original invoice has no customer to credit. Issue the credit by hand at your provider.Issue by hand, then mark handled
invalid_original_markThe 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_adjustmentThe 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_unsupportedThe 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_refundedThe refund returned no money for any line. Nothing to do unless you expected a credit.Nothing; off the Action needed list
exceeds_originalThe 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_ambiguousThe 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_linesLess 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_linesMore 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_moneyThe refund returned no money (a restock only?). Nothing to do unless you expected a credit.Nothing; off the Action needed list
refund_pendingThe 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_mappableThe 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_refundThe 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_cancelledThe 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_pendingThis 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_outdatedThe 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_paidThe 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_missingYour 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_missingYour 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_unsupportedThe 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_missingChoose what your invoices cover (goods, services or both) in the French invoices section of Settings, then press Retry.Fix the cause, then retry
number_takenThis 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_takenThis 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_connectedNo 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_issueThe 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_refusedTallio 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_reachedYour 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_issuedThe 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_cancelledThe 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_creditableTallio 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_refusedThe 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_expiredThe 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_refundThe app did not credit this refund. Credit it by hand at your provider.Issue by hand, then mark handled
credit_exceeds_balanceThe 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_registeredThe 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_confirmationThe 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_failedThe 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_rejectedYour 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_exhaustedThe 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_cancelledThe 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_invalidTallio 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_failedTallio 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