# Automatic actions for orders Automatic order actions in Ritevo: triggers, conditions and steps - invoice, shipment, label, status - with ready-made examples. An order action reacts to a change in an order and carries out the steps you set on it. Most often it changes the order status or your own custom status, issues an invoice or a receipt, sends a document to the accounting system, creates a shipment, prints a label or a receipt, updates order data - the buyer, invoice details, delivery, payment - adds a note, marks the order as a favorite and much more. The general rules - conditions, branches, loop protection - are covered in [How automatic actions work](https://ritevo.com/en/docs/automations/how-it-works). > **Required integration:** Actions themselves need no integration. Specific steps do: **Create shipment** needs a shipping integration, **Send invoice to external accounting** an accounting integration, **Print shipment label** a printer integration. ## Where to find actions Order actions are in the **Orders → Actions** menu (in the left panel). For every action the list shows its trigger, conditions and steps, and whether it is active. You add a new action with the **Add new action** button in the top right corner. The breadcrumbs at the top of the page (**Dashboard → Orders → Actions**) always show where you are. ![The list of automatic order actions with the Actions item highlighted in the left panel; the Add new action button in the top right corner is framed](https://ritevo.com/docs/automations/en-order-actions-list.webp) The action form: basic settings at the top (name, description, trigger, time zone, **Active**), conditions on the left, steps on the right. ![An empty new-action form for orders: basic settings, a condition card and a step card](https://ritevo.com/docs/automations/en-action-form-empty.webp) ## Triggers A trigger is a change that happened in the order. It does not matter who made it: you, the sales channel while the order was fetched, or another action. ### Order and statuses - **Order** (API: "Order" = `ORDER`) - a new order reached Ritevo or an existing one was updated when fetched from the sales channel; also deleting and restoring an order. This is the trigger for "do something with every new order" actions. - **Order status changed** (API: "Order status changed" = `STATUS_CHANGED`) - the order status changed, for example to **Confirmed**. - **Status changed** (API: "Status changed" = `USER_DEFINED_STATUS_CHANGED`) - your own custom order status changed. - **Payment data changed** (API: "Payment data changed" = `PAYMENT_DATA_CHANGED`) - the payment changed, for example the order was paid. - **Order date changed**, **Own note changed**, **Favorite status changed**. (API: "Order date changed" = `ORDER_DATE_CHANGED`, "Own note changed" = `OWN_NOTE_CHANGED`, "Favorite status changed" = `FAVORITE_STATUS_CHANGED`) ### Order data - **Line item changed** (API: "Line item changed" = `LINE_ITEM_CHANGED`) - an item was added, changed or removed. - **Buyer data changed**, **Company data changed**. (API: "Buyer data changed" = `BUYER_DATA_CHANGED`, "Company data changed" = `COMPANY_DATA_CHANGED`) - **Delivery address changed**, **Delivery method changed**, **Pickup point changed**, **Delivery time changed**, **Basic delivery data changed**. (API: "Delivery address changed" = `DELIVERY_ADDRESS_CHANGED`, "Delivery method changed" = `DELIVERY_METHOD_CHANGED`, "Pickup point changed" = `DELIVERY_PICKUP_POINT_CHANGED`, "Delivery time changed" = `DELIVERY_TIME_CHANGED`, "Basic delivery data changed" = `DELIVERY_BASIC_CHANGED`) ### Documents, shipments and printing - **Invoice (added/removed)**, **Receipt (added/removed)** (API: "Invoice (added/removed)" = `INVOICE_CHANGED`, "Receipt (added/removed)" = `RECEIPT_CHANGED`) - a document was issued or deleted. - **Invoice sent to external accounting**, **Receipt sent to external accounting**. (API: "Invoice sent to external accounting" = `TRANSFERRED_INVOICE_TO_EXTERNAL_ACCOUNTING`, "Receipt sent to external accounting" = `TRANSFERRED_RECEIPT_TO_EXTERNAL_ACCOUNTING`) - **Shipment created** (API: "Shipment created" = `CREATE_SHIPMENT`) - a shipment was created for the order. - **Print job** (API: "Print job" = `CREATE_PRINT_JOB`) - a label or receipt print was requested. ## Conditions Conditions check the order at the moment the action runs. The names below match the list in the action form. ### Integration and statuses - **Integration is** / **Integration is not** (API: "Integration is" = `INTEGRATION_IS`, "Integration is not" = `INTEGRATION_IS_NOT`; value in `uuidValues`: ids of sales integrations: `GET /integrations/marketplaces`, `GET /integrations/shops`) - you pick one or several from the list of your integrations. With several, it is enough that the order comes from any of them. - **Order status is** / **Order status is not** (API: "Order status is" = `ORDER_STATUS_IS`, "Order status is not" = `ORDER_STATUS_IS_NOT`; value in `enumValues`: `CONFIRMED`, `CANCELLED`, `WAITING_FOR_PAYMENT`, `WAITING_FOR_CONFIRMATION`) - you pick one or several order statuses, for example Confirmed. - **Order status changed to** (API: "Order status changed to" = `ORDER_STATUS_CHANGED_TO`; value in `enumValues`: `CONFIRMED`, `CANCELLED`, `WAITING_FOR_PAYMENT`, `WAITING_FOR_CONFIRMATION`) - use it with the **Order status changed** trigger: the condition is met when, after the change, the order has one of the statuses you picked. - **Status is** / **Status is not** / **Status changed to** (API: "Status is" = `USER_DEFINED_STATUS_IS`, "Status is not" = `USER_DEFINED_STATUS_IS_NOT`, "Status changed to" = `USER_DEFINED_STATUS_CHANGED_TO`; value in `uuidValues`: ids of custom order statuses: `GET /orders/statuses`) - the same for your own custom statuses. ### Payment - **Payment status is** / **Payment status is not** (API: "Payment status is" = `PAYMENT_STATUS_IS`, "Payment status is not" = `PAYMENT_STATUS_IS_NOT`; value in `enumValues`: `WAITING_FOR_PAYMENT`, `PAID`, `OVERPAID`, `UNDERPAID`) - for example Paid, Underpaid, Overpaid. - **Payment method is** / **Payment method is not** (API: "Payment method is" = `PAYMENT_METHOD_IS`, "Payment method is not" = `PAYMENT_METHOD_IS_NOT`; value in `enumValues`: `BANK_TRANSFER`, `CASH`, `CASH_ON_DELIVERY`, `COMPENSATION`, `CARD`, `PAYU`, `PAYPAL`, `P24`, `OTHER`) - one or several methods. - **Order not paid** (API: "Order not paid" = `PAYMENT_NOT_PAID`; value in `booleanValues`: always `[true]`) - nothing has come in yet. - **Amount paid greater than** / **less than** / **equal to** (API: "Amount paid greater than" = `PAYMENT_PAID_AMOUNT_GREATER_THAN`, "less than" = `PAYMENT_PAID_AMOUNT_LESS_THAN`, "equal to" = `PAYMENT_PAID_AMOUNT_EQUALS`; value in `bigDecimalValue`: a number, for example `500.00`) - compared with the amount you enter. - **Amount to pay greater than** / **less than** / **equal to** (API: "Amount to pay greater than" = `PAYMENT_TOTAL_TO_PAY_AMOUNT_GREATER_THAN`, "less than" = `PAYMENT_TOTAL_TO_PAY_AMOUNT_LESS_THAN`, "equal to" = `PAYMENT_TOTAL_TO_PAY_AMOUNT_EQUALS`; value in `bigDecimalValue`: a number, for example `500.00`) - for example different steps for orders above 100 EUR. ### Delivery and line items - **Delivery country is** / **Delivery country is not** (API: "Delivery country is" = `DELIVERY_COUNTRY_IS`, "Delivery country is not" = `DELIVERY_COUNTRY_IS_NOT`; value in `enumValues`: two-letter ISO country codes, for example `GB`, `DE`) - one or several countries. - **Delivery region is** / **Delivery region is not** (API: "Delivery region is" = `DELIVERY_REGION_IS`, "Delivery region is not" = `DELIVERY_REGION_IS_NOT`; value in `enumValues`: `EUROPE`) - currently Europe is available. - **Delivery city contains** / **Delivery city does not contain** (API: "Delivery city contains" = `DELIVERY_CITY_CONTAINS`, "Delivery city does not contain" = `DELIVERY_CITY_CONTAINS_NOT`; value in `stringValues`: a list of words or text fragments; any of them is enough, letter case does not matter) - part of the city name. - **Number of line items greater than** / **less than** / **equal to** (API: "Number of line items greater than" = `LINE_ITEMS_COUNT_GREATER_THAN`, "less than" = `LINE_ITEMS_COUNT_LESS_THAN`, "equal to" = `LINE_ITEMS_COUNT_EQUALS`; value in `integerValue`: a whole number) - how many different items the order has. - **Item quantity greater than** / **less than** / **equal to** (API: "Item quantity greater than" = `LINE_ITEM_QUANTITY_GREATER_THAN`, "less than" = `LINE_ITEM_QUANTITY_LESS_THAN`; value in `integerValue`: a whole number | "equal to" = `LINE_ITEM_QUANTITY_EQUALS`; value in `bigDecimalValue`: a number, for example `500.00`) - how many units an item has. - **Item name contains** / **Item name does not contain** (API: "Item name contains" = `LINE_ITEM_NAME_CONTAINS`, "Item name does not contain" = `LINE_ITEM_NAME_NOT_CONTAINS`; value in `stringValues`: a list of words or text fragments; any of them is enough, letter case does not matter) - one or several words; any of them is enough. ### Documents and shipment - **Has invoice** / **Has no invoice**, **Has receipt** / **Has no receipt**, **Has correction** / **Has no correction**. (API: "Has invoice" = `HAS_INVOICE`, "Has no invoice" = `HAS_INVOICE_NOT`, "Has receipt" = `HAS_RECEIPT`, "Has no receipt" = `HAS_RECEIPT_NOT`, "Has correction" = `HAS_CORRECTION`, "Has no correction" = `HAS_CORRECTION_NOT`; value in `booleanValues`: always `[true]`) - **Has a successful invoice transfer to external accounting** / **Has no successful invoice transfer to external accounting**, **Has a successful receipt transfer to external accounting** / **Has no successful receipt transfer to external accounting** (API: "Has a successful invoice transfer to external accounting" = `HAS_SUCCESSFUL_EXTERNAL_TRANSFER_INVOICE_TO_ACCOUNTING`, "Has no successful invoice transfer to external accounting" = `HAS_SUCCESSFUL_EXTERNAL_TRANSFER_INVOICE_TO_ACCOUNTING_NOT`; value in `uuidValues`: id of an accounting integration: `GET /integrations/accountings` | "Has a successful receipt transfer to external accounting" = `HAS_SUCCESSFUL_EXTERNAL_TRANSFER_RECEIPT_TO_ACCOUNTING`, "Has no successful receipt transfer to external accounting" = `HAS_SUCCESSFUL_EXTERNAL_TRANSFER_RECEIPT_TO_ACCOUNTING_NOT`; value in `uuidValues`: id of an accounting integration: `GET /integrations/accountings`) - you pick the accounting integration. - **Has shipment** / **Has no shipment**. (API: "Has shipment" = `HAS_SHIPMENT`, "Has no shipment" = `HAS_SHIPMENT_NOT`; value in `booleanValues`: always `[true]`) - **Shipment status is** / **Shipment status is not** (API: "Shipment status is" = `SHIPMENT_STATUS_IS`, "Shipment status is not" = `SHIPMENT_STATUS_IS_NOT`; value in `enumValues`: `PENDING`, `SUCCESS`, `ERROR`) - one or several shipment statuses. - **Shipment belongs to integration** / **Shipment does not belong to integration** (API: "Shipment belongs to integration" = `SHIPMENT_SHIPPING_INTEGRATION_IS`, "Shipment does not belong to integration" = `SHIPMENT_SHIPPING_INTEGRATION_IS_NOT`; value in `uuidValues`: id of a shipping integration: `GET /integrations/shippings`) - you pick the shipping integration. ### Buyer, note and favorites - **Buyer email contains** / **does not contain**, **Buyer name contains** / **does not contain**, **Buyer company contains** / **does not contain** (API: "Buyer email contains" = `BUYER_EMAIL_CONTAINS`, "does not contain" = `BUYER_EMAIL_NOT_CONTAINS`, "Buyer name contains" = `BUYER_NAME_CONTAINS`, "does not contain" = `BUYER_NAME_NOT_CONTAINS`, "Buyer company contains" = `BUYER_COMPANY_CONTAINS`, "does not contain" = `BUYER_COMPANY_NOT_CONTAINS`; value in `stringValues`: a list of words or text fragments; any of them is enough, letter case does not matter) - part of the text. - **No note** / **Has note** / **Note was removed**. (API: "No note" = `OWN_NOTE_IS_EMPTY`, "Has note" = `OWN_NOTE_IS_NOT_EMPTY`, "Note was removed" = `OWN_NOTE_CHANGED_TO_EMPTY`; value in `booleanValues`: always `[true]`) - **Own note contains keywords** / **Own note does not contain keywords**. (API: "Own note contains keywords" = `OWN_NOTE_CONTAINS_KEYWORDS`, "Own note does not contain keywords" = `OWN_NOTE_NOT_CONTAINS_KEYWORDS`; value in `stringValues`: a list of words or text fragments; any of them is enough, letter case does not matter) - **Order is a favorite** / **Order is not a favorite**, **Favorite status changed from** / **to**. (API: "Order is a favorite" = `FAVORITE_STATUS_IS`, "Order is not a favorite" = `FAVORITE_STATUS_IS_NOT`, "Favorite status changed from" = `FAVORITE_STATUS_CHANGED_FROM`, "to" = `FAVORITE_STATUS_CHANGED_TO`; value in `booleanValue`: `true` or `false`) ### Time - **Action run time from** / **to**, **Action run day is** / **is not**, **Action run date from** / **to** (API: "Action run time from" = `CURRENT_TIME_FROM`, "to" = `CURRENT_TIME_TO`; value in `offsetDateTimeValue`: a date-time with the offset of the action's zone; only the hour and minute count, for example `2026-01-10T16:00:00+00:00` | "Action run day is" = `CURRENT_DAY_OF_WEEK_IS`, "is not" = `CURRENT_DAY_OF_WEEK_IS_NOT`; value in `integerValues`: numbers 1-7, where 1 is Monday and 7 is Sunday | "Action run date from" = `CURRENT_DATE_FROM`, "to" = `CURRENT_DATE_TO`; value in `offsetDateTimeValue`: a date-time with an offset; the whole instant counts) - counted from the moment the action runs. - **Order time from** / **to**, **Order day is** / **is not**, **Order date from** / **to** (API: "Order time from" = `ORDER_TIME_FROM`, "to" = `ORDER_TIME_TO`; value in `offsetDateTimeValue`: a date-time with the offset of the action's zone; only the hour and minute count, for example `2026-01-10T16:00:00+00:00` | "Order day is" = `ORDER_DAY_OF_WEEK_IS`, "is not" = `ORDER_DAY_OF_WEEK_IS_NOT`; value in `integerValues`: numbers 1-7, where 1 is Monday and 7 is Sunday | "Order date from" = `ORDER_DATE_FROM`, "to" = `ORDER_DATE_TO`; value in `offsetDateTimeValue`: a date-time with an offset; the whole instant counts) - counted from the moment the order was placed. - **Order age greater than (days)** / **Order age less than (days)** (API: "Order age greater than (days)" = `ORDER_AGE_DAYS_GREATER_THAN`, "Order age less than (days)" = `ORDER_AGE_DAYS_LESS_THAN`; value in `integerValue`: a whole number) - how many days have passed since the order was placed. > **Good to know:** The "has" conditions are the simplest protection against duplicates: add **Has no invoice** to an action that issues an invoice and **Has no shipment** to an action that creates a shipment. ## Steps - what an action can do ### Statuses and flags - **Update order status**, **Update status** (custom). (API: "Update order status" = `UPDATE_STATUS`; value in `enumValue`: `CONFIRMED`, `CANCELLED`, `WAITING_FOR_PAYMENT`, `WAITING_FOR_CONFIRMATION` | "Update status" = `UPDATE_USER_DEFINED_STATUS`; value in `uuidValue`: ids of custom order statuses: `GET /orders/statuses`) - **Update own note**, **Update favorite status**. (API: "Update own note" = `UPDATE_OWN_NOTE`; value in `stringValue`: text up to 255 characters; `null` clears the note | "Update favorite status" = `UPDATE_FAVORITE_STATUS`; value in `booleanValue`: `true` or `false`) ### Documents - **Generate invoice**, **Generate receipt** (API: "Generate invoice" = `GENERATE_INVOICE`, "Generate receipt" = `GENERATE_RECEIPT`; value in `uuidValue`: id of a document settings template: `GET /orders/billing/settings`) - using the document settings template you pick. - **Delete invoice**, **Delete receipt**. (API: "Delete invoice" = `DELETE_INVOICE`, "Delete receipt" = `DELETE_RECEIPT`; value in `booleanValue`: always `true` - a confirmation) - **Send invoice to external accounting**, **Send receipt to external accounting** (API: "Send invoice to external accounting" = `TRANSFER_INVOICE_TO_EXTERNAL_ACCOUNTING`, "Send receipt to external accounting" = `TRANSFER_RECEIPT_TO_EXTERNAL_ACCOUNTING`; value in `uuidValue`: id of an accounting integration: `GET /integrations/accountings`) - needs an accounting integration. - **Update company data with buyer data** (API: "Update company data with buyer data" = `USE_BUYER_AS_BILLING_RECIPIENT`; value in `booleanValue`: always `true` - a confirmation) - copies the buyer's data into the data on the document. Plan sending documents step by step - first issuing, then sending: - **Invoice** - the first action ends with the **Generate invoice** step. The second starts on the **Invoice (added/removed)** trigger, has the **Has invoice** condition and the **Send invoice to external accounting** step. - **Receipt** - the same: the first action ends with the **Generate receipt** step, and the second starts on the **Receipt (added/removed)** trigger, has the **Has receipt** condition and the **Send receipt to external accounting** step. - **Corrections** - you can issue many corrections to one invoice. Send each right after issuing it, before you issue the next one. > **Good to know:** The send step always sends just one document - the newest non-deleted one of that type. If you first issue all documents and only then turn on sending, only the last one goes out, and you send the others by hand. You cannot send a deleted document. ### Shipments and printing - **Create shipment** (API: "Create shipment" = `CREATE_SHIPMENT`; value in `uuidValue`: id of a shipping integration: `GET /integrations/shippings`) - needs a shipping integration. - **Print shipment label** (API: "Print shipment label" = `PRINT_SHIPMENT_LABEL`; value in `uuidValue`: id of a printer integration: `GET /integrations/printers`) - prints the label of the order's newest successful shipment, needs a printer integration. - **Print receipt** (API: "Print receipt" = `PRINT_RECEIPT`; value in `uuidValue`: id of a printer integration: `GET /integrations/printers`) - prints the order's newest receipt. Plan label printing step by step, as two actions: - **First action** - ends with the **Create shipment** step. - **Second action** - starts on the **Shipment created** trigger, has the **Shipment status is** condition with **Created successfully** and a single **Print shipment label** step. This way every new shipment prints its label right away - also when the order has several parcels. > **Good to know:** The **Print shipment label** step always prints just one label - that of the newest successful shipment. If you first create all shipments and only then turn on printing, only the last one is printed, and you print the others by hand with **Print**. If a new shipment fails, the step prints the label of the previous successful one. ### Order data - **Update buyer data**, **Update company data**, **Update delivery address**, **Update delivery method**, **Update pickup point**, **Update delivery time**, **Update basic delivery data**, **Update payment data**, **Update order date** (API: "Update buyer data" = `UPDATE_BUYER`; value in `buyerData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update company data" = `UPDATE_COMPANY`; value in `companyData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update delivery address" = `UPDATE_DELIVERY_ADDRESS`; value in `deliveryAddressData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update delivery method" = `UPDATE_DELIVERY_METHOD`; value in `deliveryMethodData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update pickup point" = `UPDATE_DELIVERY_PICKUP_POINT`; value in `deliveryPickupPointData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update delivery time" = `UPDATE_DELIVERY_TIME`; value in `deliveryTimeData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update basic delivery data" = `UPDATE_DELIVERY_BASIC`; value in `deliveryBasicData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update payment data" = `UPDATE_PAYMENT`; value in `paymentData`: an object with the data to set; `useEntityWhenNull: true` leaves the fields you do not send unchanged | "Update order date" = `UPDATE_ORDER_DATE`; value in `offsetDateTimeValue`: a date-time with an offset; the whole instant counts) - set the given data in the order. The **Fill empty fields with the order's current data** option leaves the fields you do not fill in unchanged. - **Delete order**, **Restore order**. (API: "Delete order" = `DELETE_ORDER`, "Restore order" = `RESTORE_ORDER`; value in `booleanValue`: always `true` - a confirmation) Steps that delete something require an explicit confirmation when you create the action. ## Steps that wait for an external system Some steps do not finish right away, because the answer has to come from outside: - **Send invoice to external accounting** / **Send receipt to external accounting** - some systems accept the document and confirm it only after a while. Until then the transfer is "in progress". - **Create shipment** - the carrier accepts the request and returns the tracking number and the label after a while. Until there is a final result, the action **waits**: it does not move to the next step and does not start other actions. It continues only when the external system answers - with **success** or an **error**. The same thing happens in both cases: - **Next step** - the action moves to the next step, after an error too. An error does not stop the action, so that you can react to it, for example set a custom status "Shipment problem". - **Other actions** - if it was the action's last step, actions with the **Shipment created** or **Invoice sent to external accounting** trigger can start. They also start after both a success and an error. - **Audit** - you will see the result, and for an error also its reason, in the orders audit. > **Good to know:** You do not need to add your own "wait until it is ready" conditions - the next step starts only after the answer anyway. What happens after an error is your decision. If the next step should run only after a success, add a [branch](https://ritevo.com/en/docs/automations/how-it-works#branches) to it with the **Shipment status is** Created successfully condition, or **Has a successful invoice transfer to external accounting** / **Has a successful receipt transfer to external accounting**, and do not set a default action. After an error the action then stops on that step. These conditions look at every shipment and transfer of the order, earlier ones too. ## Examples ### A shipment for confirmed orders from a chosen integration - Trigger: **Order**. - Conditions: **Integration is** the chosen sales integration, **Order status is** Confirmed. - Steps: **Create shipment** with the chosen shipping integration, then **Update status** to a custom status, for example "To pack". ![The action form: the Order trigger, the Integration is and Order status is conditions, the Create shipment and Update status steps](https://ritevo.com/docs/automations/en-order-action-shipment.webp) > **Good to know:** The second step runs once the carrier answers - also when the shipment ends with an error. If the status should change only after a successful shipment, add a branch to the second step with the **Shipment status is** Created successfully condition and no default action. If the same action could reach an order more than once, add the **Has no shipment** condition. ### Invoice and shipment after payment - Trigger: **Payment data changed**. - Conditions: **Payment status is** Paid, **Has no invoice**, **Has no shipment**. - Steps: **Generate invoice**, then **Create shipment**, then **Print shipment label**. ### Flagging international orders - Trigger: **Order status changed**. - Conditions: **Order status changed to** Confirmed, **Delivery country is not** your home country. - Step: **Update status** to a custom status, for example "International". ### One action, different carriers - Trigger: **Order status changed**, condition **Order status changed to** Confirmed. - Step **Create shipment** with branches: the first variant with the condition **Delivery country is not** your home country and an international carrier integration, the default action with the domestic one. ## What an order action will not do - It will not send a message or an email to the customer and will not use AI. Only [message actions](https://ritevo.com/en/docs/automations/message-actions) have those steps. - It will not run with a delay or at a set time. The **Order age greater than (days)** condition is checked only when something changes in the order - the passing of time alone starts nothing. - It will not issue a document or create a shipment without the settings those operations also need when done by hand (a document template, a shipping integration). ## Run audit Runs of order actions are in **Settings → Audit → Orders**. Every entry shows the action, the step number, the result and an error, if any. What the results mean is explained in [How automatic actions work](https://ritevo.com/en/docs/automations/how-it-works#history). ## Example of saving through the API The "Invoice and shipment after payment" action from the Examples section. The general rules of saving are on the [How automatic actions work](https://ritevo.com/en/docs/automations/how-it-works) page. ```json { "name": "Invoice and shipment after payment", "description": "Issues an invoice, creates a shipment and prints the label once the order is paid", "active": true, "userTimezone": "Europe/Warsaw", "triggerType": "PAYMENT_DATA_CHANGED", "conditions": [ { "type": "PAYMENT_STATUS_IS", "enumValues": [ "PAID" ] }, { "type": "HAS_INVOICE_NOT", "booleanValues": [ true ] }, { "type": "HAS_SHIPMENT_NOT", "booleanValues": [ true ] } ], "actionSteps": [ { "stepOrder": 1, "action": { "type": "GENERATE_INVOICE", "uuidValue": "" } }, { "stepOrder": 2, "action": { "type": "CREATE_SHIPMENT", "uuidValue": "" } }, { "stepOrder": 3, "action": { "type": "PRINT_SHIPMENT_LABEL", "uuidValue": "" } } ] } ``` --- All help in one file: https://ritevo.com/llms-full.txt. Help map with links to every page: https://ritevo.com/llms.txt.