Pircel public API

Pircel provides you with APIs that you can use for processes involving your store and your partner carriers. For a procedure such as "Create Voucher", we provide you with an API call for all delivery companies.

How to send a request?

const response = await fetch("https://test-api.pircel.com", {
  method: "POST",
  mode: "cors",
  headers: new Headers({
    "Content-Type": "application/json",
    // replace '1234' with your API key
    apikey: "1234"
  }),
  body: JSON.stringify({
    query: `mutation createVoucher(: String, : String!, : Int!, : Date){
      createVoucher(notes: , orderId: , packagesQuantity: , pickupDate: ){
        voucherPrintDocuments
        vouchers
      }
    }`,
    variables: {
      notes: "Fragile packages",
      orderId: "14317",
      packagesQuantity: 2,
      pickupDate: "2023-10-03",
    }
  })
});

With JavaScript, it is possible to just use a template literal and simplify the API call body.

const response = await fetch('https://test-api.pircel.com', {
  method: 'POST',
  mode: 'cors',
  headers: new Headers({
    'Content-Type': 'application/json',
    // replace '1234' with your API key
    apikey: '1234',
  }),
  body: JSON.stringify({
    query: `mutation {
      createVoucher(
        notes: "Fragile",
        orderId: "A1",
        packagesQuantity: 1,
        pickupDate: "2023-03-06",
      ) {
        vouchers
        voucherPrintDocuments
      }
    }`
  }),
});

You can find a working example on codesandbox.

We are using GraphQL API.

GraphQL is a query language and server-side runtime for application programming interfaces (APIs) that prioritizes giving clients exactly the data they request and no more. GraphQL is designed to make APIs fast, flexible, and developer-friendly.

API are separate in two categories query & mutation:

query: When we want to read an information that is already stored.

structure:

{
   field(arg: "value") {
     subField
   }
}

mutation: When we want to change information (create, update, delete).

structure:

mutation {
  field (arg: "value") {
    subField
  }
}

More info about GraphQL

You can go to https://test-api.pircel.com and have access to try all the queries/mutations (API) we provide to you.

To try any of the API first you should add a shipment.

Follow the link and run the default mutation that we provide to you.

The following error messages were suggested:


                'addShipment.invalidPostcode' ⇒ Μη έγκυρος ταχυδρομικός κώδικας
                'addShipment.orderIdAlreadyExists' ⇒ Η παραγγελία υπάρχει ήδη
                
                'authenticate.invalidToken' ⇒ Μη έγκυρο authentication token, παρακαλώ συνδεθείτε ξανά
                
                'cancelVoucher.eshopNotFound' ⇒ Δεν βρέθηκε ηλεκτρονικό κατάστημα
                'cancelVoucher.orderNotFound' ⇒  Δεν βρέθηκε η παραγγελία
                
                'createPickupList.invalidDeliveryCompany' ⇒  Μη έγκυρη μεταφορική εταιρεία
                'createPickupList.noShipmentsForSelectedDeliveryCompanies' ⇒ Δεν βρέθηκαν οι αποστολές για τις επιλεγμένες μεταφορικές εταιρείες
                'createPickupList.noShipmentsFound' ⇒  Δεν βρέθηκαν οι αποστολές
                'createPickupList.unprintedVouchers' ⇒ Βρέθηκαν μη εκτυπωμένα παραστατικά
                
                'createVoucher.invalidDeliveryCompany' ⇒ Μη έγκυρη μεταφορική εταιρεία
                'createVoucher.invalidPickupDate' ⇒ Μη έγκυρη ημερομηνία παραλαβής
                'createVoucher.newArgsCancelFirstExistingVouchers' ⇒ Αδυναμία δημιουργίας ή λήψης νέου παραστατικού. Το παραστατικό έχει ήδη δημιουργηθεί για αυτή την παραγγελία. Παρακαλούμε για να προβείτε σε νέα δημιουργία ακυρώστε πρώτα το προηγούμενο παραστατικό.
                'createVoucher.orderNotFound' ⇒ Δεν βρέθηκε παραγγελία
                
                'forbidden'⇒ Απαγορεύεται η πρόσβαση
                'invalidpickuDateType', ⇒ Μη έγκυρη μορφή ημερομηνίας παραλαβής
                'login.userNotFound' ⇒ Δεν βρέθηκε ο χρήστης
                
                'pintVoucher.canceledVouchersFound' ⇒ Βρέθηκαν ακυρωμένα παραστατικά
                'printVoucher.orderNotFound' ⇒ Δεν βρέθηκε η παραγγελία
                'printVoucher.vouchersNotFound' ⇒ Δεν βρέθηκαν παραστατικά
                
                'updateShipment.invalidPostcode' ⇒ Μη έγκυρος ταχυδρομικός κώδικας
                'updateShipment.orderIdCannotChange' ⇒ Ο κωδικός της παραγγελίας δεν μπορεί να αλλάξει
                'updateShipment.shipmentCannotChange' ⇒ Η παραγγελία δεν μπορεί να αλλάξει γιατι έχουν ήδη δημιουργηθεί παραστατικά
                
                'speedex.apiInaccessible' ⇒ Το API της Speedex δεν είναι διαθέσιμο
                'speedex.cannotCreateSession' ⇒ Το API της Speedex δεν είναι διαθέσιμο
                'createVoucher.speedex.invalidPostcode' ⇒ Μη έγκυρος ταχυδρομικός κώδικας
                'speedex.noResponse' ⇒ Το API της Speedex δεν είναι διαθέσιμο
                'printPickupList.speedex.noPickupListNumber' ⇒ Δεν υπάρχει αριθμός λίστας παραλαβής
                'printVoucher.speedex.noVoucher' ⇒ Δεν βρέθηκε παραστατικό
                
API Endpoints
# Test (Currently offline):
https://test-api.pircel.com
# Production:
https://api.pircel.com
Headers
# Your API token from the dashboard. Must be included in all API calls.
apikey: <YOUR_TOKEN_HERE>

Queries

deliveryCompanies

Description

Get delivery companies with optional filtering

Response

Returns [DeliveryCompany]

Arguments
Name Description
companies - [DeliveryCompanyIDOrSlugInput] Specific delivery companies to retrieve by ID or slug
eshopId - String Filter delivery companies by eshop ID
forCheckout - Boolean Only return companies visible at checkout
tags - [String] Filter by tags
withApiIntegration - Boolean Only return companies with API integration

Example

Query
query DeliveryCompanies(
  $companies: [DeliveryCompanyIDOrSlugInput],
  $eshopId: String,
  $forCheckout: Boolean,
  $tags: [String],
  $withApiIntegration: Boolean
) {
  deliveryCompanies(
    companies: $companies,
    eshopId: $eshopId,
    forCheckout: $forCheckout,
    tags: $tags,
    withApiIntegration: $withApiIntegration
  ) {
    _id
    acceptedPaymentMethods
    capabilities {
      cancellation {
        ...CancellationCapabilityFragment
      }
      multiPiece {
        ...MultiPieceCapabilityFragment
      }
      parcelIdentityMode
      perPieceTracking
      referenceScope
    }
    createdAt
    credentialFields {
      isRequired
      isSecret
      key
      label
      type
    }
    defaultConfig {
      displayAtCheckout
      minimumPrice
      priceMultiplier
      roundingIncrement
    }
    description
    hasAction
    hasApiIntegration
    internalOnly
    isEnabled
    isVisibleAtCheckout
    logo {
      alt
      path
    }
    minimumWeight
    name
    pickupTimeOptions {
      closeOptions
      fixedOptions
      mode
      readyOptions
    }
    services {
      code
      name
    }
    slug
    supportedActions
    supportsFuelSurcharge
    tags
    trackingUrlInformation {
      baseUrl
      exampleUrl
      parameterName
      supportsDeepLink
      urlType
    }
    updatedAt
    usesAccountShipperAddress
  }
}
Variables
{
  "companies": [DeliveryCompanyIDOrSlugInput],
  "eshopId": "abc123",
  "forCheckout": true,
  "tags": ["xyz789"],
  "withApiIntegration": true
}
Response
{
  "data": {
    "deliveryCompanies": [
      {
        "_id": "4",
        "acceptedPaymentMethods": ["AFTERPAY_CLEARPAY"],
        "capabilities": DeliveryCompanyCapabilities,
        "createdAt": "2007-12-03T10:15:30Z",
        "credentialFields": [CredentialField],
        "defaultConfig": DeliveryCompanyDefaultConfig,
        "description": "abc123",
        "hasAction": true,
        "hasApiIntegration": true,
        "internalOnly": true,
        "isEnabled": true,
        "isVisibleAtCheckout": true,
        "logo": Logo,
        "minimumWeight": 987.65,
        "name": "abc123",
        "pickupTimeOptions": PickupTimeOptions,
        "services": [DeliveryCompanyService],
        "slug": "abc123",
        "supportedActions": ["CANCEL_VOUCHER"],
        "supportsFuelSurcharge": false,
        "tags": ["abc123"],
        "trackingUrlInformation": TrackingUrlInformation,
        "updatedAt": "2007-12-03T10:15:30Z",
        "usesAccountShipperAddress": true
      }
    ]
  }
}

eshop

Description

Get eshop details

Response

Returns an Eshop

Arguments
Name Description
_id - ObjectID

Example

Query
query Eshop($_id: ObjectID) {
  eshop(_id: $_id) {
    _id
    address
    addressBook {
      _id
      address {
        ...AddressFragment
      }
      contact {
        ...ContactFragment
      }
      isDefault
      name
    }
    bookingsBlockedByPolicy
    brandAssets {
      logos {
        ...BrandLogosFragment
      }
    }
    city
    deliveryCompanies {
      bookingRefusal
      config {
        ...EshopDeliveryCompanyConfigFragment
      }
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      isEnabled
      requestableOptions {
        ...RequestableOptionFragment
      }
    }
    freeShipping {
      checkoutDisplay
      isEnabled
      restOfWorld {
        ...FreeShippingRestOfWorldFragment
      }
      revision
      rules {
        ...FreeShippingRuleFragment
      }
    }
    general {
      buyerEmails {
        ...GeneralBuyerEmailsConfigFragment
      }
      checkout {
        ...GeneralCheckoutConfigFragment
      }
      dataRetention {
        ...GeneralDataRetentionConfigFragment
      }
      voucher {
        ...GeneralVoucherConfigFragment
      }
    }
    merchantNotices {
      copiedAt
      dismissedAt
      emailedAt
      kind
      shownAt
      version
    }
    name
    packageInsurance
    pageCustomization {
      colorScheme {
        ...ColorSchemeFragment
      }
    }
    phone
    policyAcceptances {
      acceptedAt
      acceptedBy
      policy
      version
    }
    postcode
    pricingEtag
    retentionHold {
      reason
      setAt
      setBy
    }
    securityValue
    slug
    storeConnections {
      _id
      apiKey {
        ...StoreConnectionKeyFragment
      }
      capabilities
      consecutiveFailures
      createdAt
      credentialTransport
      disconnectedAt
      expiresAt
      externalId
      hintDelivery {
        ...StoreHintDeliveryFragment
      }
      hintSigningSecretSet
      hintUrl
      lastFailedAt
      lastFeedReadAt
      lastSyncedAt
      outboundBacklog {
        ...StoreOutboundBacklogFragment
      }
      platform
      pluginVersion
      restBaseUrl
      retiredAt
      scopes
      status
      storeCurrencyCode
      storeDomain
    }
    storeFreeShippingCodFee
    taxProfile {
      confirmedAt
      confirmedBy
      distanceSalesTaxation
      establishmentCountry
      goodsRateCategory
      islandEstablishment
      mode
      ossRegistered
      pricesIncludeVat
      vatRegistrations {
        ...VatRegistrationFragment
      }
    }
  }
}
Variables
{"_id": "5e5677d71bdc2ae76344968c"}
Response
{
  "data": {
    "eshop": {
      "_id": "5e5677d71bdc2ae76344968c",
      "address": "xyz789",
      "addressBook": [AddressBookEntryType],
      "bookingsBlockedByPolicy": true,
      "brandAssets": BrandAssets,
      "city": "xyz789",
      "deliveryCompanies": [EshopDeliveryCompany],
      "freeShipping": FreeShippingConfig,
      "general": GeneralConfig,
      "merchantNotices": [MerchantNoticeRecord],
      "name": "xyz789",
      "packageInsurance": 987.65,
      "pageCustomization": PageCustomization,
      "phone": "abc123",
      "policyAcceptances": [PolicyAcceptance],
      "postcode": "abc123",
      "pricingEtag": "abc123",
      "retentionHold": RetentionHold,
      "securityValue": 987.65,
      "slug": "xyz789",
      "storeConnections": [StoreConnection],
      "storeFreeShippingCodFee": "CHARGE",
      "taxProfile": TaxProfile
    }
  }
}

eshopBranding

Description

Get public branding information for an eshop, can be used for branded pages (tracking, returns portal, etc.).

Response

Returns an EshopBranding

Arguments
Name Description
eshopId - ObjectID! Eshop identifier

Example

Query
query EshopBranding($eshopId: ObjectID!) {
  eshopBranding(eshopId: $eshopId) {
    _id
    colorScheme {
      accent
      background
      primary
      secondary
    }
    customization {
      _placeholder
    }
    logos {
      horizontal {
        ...LogoFragment
      }
      icon {
        ...LogoFragment
      }
      primary {
        ...LogoFragment
      }
    }
    name
  }
}
Variables
{"eshopId": "5e5677d71bdc2ae76344968c"}
Response
{
  "data": {
    "eshopBranding": {
      "_id": "5e5677d71bdc2ae76344968c",
      "colorScheme": BrandColorScheme,
      "customization": CustomizationExtensions,
      "logos": BrandLogos,
      "name": "abc123"
    }
  }
}

trackShipment

Description

Track a shipment for its buyer. Anyone holding the ids gets the PUBLIC view: status, progress and destination city. A valid accessToken for this shipment adds verified: the recipient, lines, parcels, voucher code, carrier link and event detail. Errors only with eshop.notFound (unknown eshop), shipment.notFound (no such shipment in that eshop, the same whether or not it exists in another), trackShipment.notApplicableForFulfillmentType (fulfilled outside a carrier), and tooManyRequests (with extensions.retryAfter in seconds) for an hour once a client has had 20 not-found answers in 10 minutes (either not-found error, a token that is not valid for the shipment, or a failed lookup or verification). A shipment without an active label answers a result: see shipmentStatus.

Response

Returns a TrackingResult

Arguments
Name Description
eshopId - ObjectID! E-shop ID
shipmentId - ObjectID! Shipment ID
accessToken - String A link token (the t of the tracking link fragment) or an access token (from verifyTrackingAccess or findShipmentByOrder), sent as a variable. Absent or not valid for this shipment: the PUBLIC view, with accessTokenStatus saying why.

Example

Query
query TrackShipment(
  $eshopId: ObjectID!,
  $shipmentId: ObjectID!,
  $accessToken: String
) {
  trackShipment(
    eshopId: $eshopId,
    shipmentId: $shipmentId,
    accessToken: $accessToken
  ) {
    access
    accessTokenStatus
    destination {
      city
      country
      countryCode
    }
    progress {
      deliveredAt
      estimatedDelivery
      lastUpdated
      events {
        ...TrackingProgressEventFragment
      }
      returnToSender
    }
    shipmentStatus
    verified {
      carrierTrackingUrl
      events {
        ...TrackingResultEventFragment
      }
      parcels {
        ...TrackingResultParcelFragment
      }
      products {
        ...TrackingResultProductFragment
      }
      recipient {
        ...TrackingResultRecipientFragment
      }
      voucherCode
    }
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "shipmentId": "5e5677d71bdc2ae76344968c",
  "accessToken": "abc123"
}
Response
{
  "data": {
    "trackShipment": {
      "access": "PUBLIC",
      "accessTokenStatus": "ABSENT",
      "destination": TrackingDestination,
      "progress": TrackingProgress,
      "shipmentStatus": "BOOKING_UNRESOLVED",
      "verified": VerifiedTracking
    }
  }
}

trackVoucher

Response

Returns [VoucherTracking]

Arguments
Name Description
code - String Voucher code

Example

Query
query TrackVoucher($code: String) {
  trackVoucher(code: $code) {
    checkpointAction
    checkpointDateTime
    checkpointLocation
    checkpointNotes
    code
    shipmentId
  }
}
Variables
{"code": "xyz789"}
Response
{
  "data": {
    "trackVoucher": [
      {
        "checkpointAction": "xyz789",
        "checkpointDateTime": "2007-12-03T10:15:30Z",
        "checkpointLocation": "xyz789",
        "checkpointNotes": "xyz789",
        "code": "abc123",
        "shipmentId": "5e5677d71bdc2ae76344968c"
      }
    ]
  }
}

Mutations

addShipment

Description

Add a shipment. With idempotencyKey, a retry returns the shipment the first call made. Otherwise booking again for an orderId already held in the same order scope (the storeConnectionId stated, or the eshop’s shipments with no connection) throws addShipment.orderIdAlreadyExists, naming that shipment in extensions.shipmentId and its connection in extensions.storeConnectionId, so a caller that lost its answer can finalise with the real id. A refused money payload throws its orderAmounts.* code and repeats the rejection on extensions: always type, naming the specific check that refused — several share one code — plus field and the submitted value on orderAmounts.invalidAmount. Read extensions rather than the code alone. A quote is a function of these inputs and nothing else: the typed countryCode and postcode, the city where an area keyed by settlement lists the postcode (and for FedEx and UPS), county for UPS; the shipper; the parcels; the shipped lines’ quantity, weight, dimensions, size, price, line money, sku, categories, extraAttributes, kind and customs fields; whether cash on delivery collects, and its amount; itemsSubtotal, discountTotal and the VAT basis; storeFreeShipping; requestedOptions; geniki.chargeCode; and the eshop’s pricingEtag. A cache keyed on more than these is safe; one keyed on fewer is not.

Response

Returns a Shipment

Arguments
Name Description
buyerNotes - String Customer's notes, trimmed. On an update, absent keeps the stored notes; null or blank clears them. Ignored and not stored on a quote (a NEW shipment with no orderId and no completed checkout); send them when the order is placed.
checkout - ShipmentCheckoutInput Checkout provenance: the flow/architecture the order came through, whether it was an express checkout, and the entry-point page. Typically set by the storefront plugin at order creation.
eshopId - ObjectID Required if the user belongs to or owns multiple eshops. Admins must specify an eshop. Not required for eshop integrations.
geniki - GenikiInput Geniki delivery company specific fields
holds - [StoreHoldInput!] The store's holds on the order, as a whole list: [] releases every store hold, and omitted keeps them. Send the holds that apply at placement (payment pending or under review, suspected fraud) on the booking itself, so the shipment is never labellable before the first sync.
includeVat - Boolean Whether the order’s amounts include VAT: the legacy per-order basis tag; send orderAmounts.pricesIncludeTax instead. With neither, the eshop’s declared taxProfile.pricesIncludeVat decides. Sent alongside a disagreeing orderAmounts.pricesIncludeTax it is refused (orderAmounts.conflictingBasisTags), not resolved by precedence.
isB2BInvoice - Boolean Indicates if the shipment is for a B2B invoice (true) or B2C invoice (false). False by default.
orderAmounts - OrderAmountsInput The order totals as the seller states them, passed verbatim (amounts-first contract). The COD collectible is amountDue when present, else grandTotal. On an update, omitting it keeps the stored totals and an explicit null withdraws them; a withdrawal is accepted only while the order is unplaced and refused afterwards with orderAmounts.lockedAfterPlacement.
orderId - String Order's id. Must be provided for the prod-test environment
parcels - [ParcelInput!] List of parcels in this shipment, each with its dimensions, weight and optional product distribution. At least one is required unless nothing on the order is shipped, in which case send an empty list.
paymentMethod - ShipmentPaymentMethodEnum Customer's payment method.
products - [ProductInput!]! List of products.
recipient - RecipientCreateInput Recipient details including address and contact information. Required, else shipmentInput.required with extensions.field recipient, unless the selected rate is IN_STORE: a counter sale may have no customer.
recipientLogistics - RecipientLogisticsInput Customer-provided logistics company details when using recipient-logistics. Ignored and not stored on a quote (a NEW shipment with no orderId and no completed checkout); a booking on the recipient-logistics carrier must send it, else addShipment.missingRecipientLogisticsDetails or updateShipment.missingRecipientLogisticsDetails.
replacesShipment - ShipmentReplacementInput On the booking of an edited order (Magento's <n>-1): the original order's shipment. The two are linked (replaces, replacedBy), and this shipment is held (REPLACES_SHIPPED_ORDER) until the original is canceled, so one purchase cannot ship twice. Set once; ignored when the shipment already replaces another.
requestedOptions - [String!] Catalogue option codes to ask every carrier for (saturday-delivery, cod-cheque). Only where the eshop has options enabled for the carrier; otherwise the carrier is refused with OPTIONS_NOT_ENABLED. An option a carrier cannot honour refuses that carrier with a reason; no rate is ever quoted without a requested option. Quote-time information: on an update, omitting it keeps the stored list; while the shipment is NEW, a different list re-prices. The update that places the order, and every later one, may restate the same list. A different one is refused with requestedOptions.lockedAfterPlacement (extensions.requestedOptions, the stored list) before anything is stored, with one exception: a dashboard user may change a placed shipment's list until its label. That re-prices the selected service for the merchant (a carrier RE_RATE) and binds a buyer RE_RATE that carries the booked charge forward, stating the options' price it does not take as ChargeOrder.optionsUnchargedCents; the buyer pays it only if orderAmounts says so. Under a live label that change is refused with requestedOptions.activeVoucher (extensions.status): cancel the label first. An option the carrier refuses answers selectedRate.optionsRefused. Preview it with shipmentRates(requestedOptions:).
requiresShipping - Boolean Whether any part of this order is shipped, as stated by the source platform. Takes precedence over the order lines, except that a line explicitly marked requiresShipping: true always wins. Omit it unless the platform states it, in which case the lines are used instead.
selectedRate - SelectedRateInput The selected service and rate for the shipment
senderNotes - String Sender's notes, trimmed. On an update, absent keeps the stored notes; null or blank clears them.
shipper - ShipperInput Where the shipment ships from: an addressBookEntryId of the eshop's address book, or an address with a contact. Omitted or null, the shipment keeps the shipper it has. The request that places the order (an addShipment with an orderId or a status past NEW, or the updateShipment that books a quote) takes the eshop's default address-book entry (isDefault, else the first) when the shipment has none, unless it is collected in store (a PICKUP rate), and records a SHIPPER_DEFAULTED audit entry. A counter sale (an IN_STORE rate) must name its shop, else shipmentInput.required with extensions.field shipper; it is never defaulted. Any later update leaves a shipment without a shipper as it is.
source - ShipmentSourceEnum Source of the shipment creation.
status - ShipmentStatusEnum Whether the order is placed: NEW (not yet), CHECKOUT_COMPLETE or MANUALLY_CREATED (placed). No other status may be named, by anyone. An order with nothing to ship is stored as NO_DELIVERY_REQUIRED, and returns to CHECKOUT_COMPLETE when it ships again. A placed counter sale (an IN_STORE rate) is stored as COLLECTED; one sent as NEW or with no status is refused with addShipment.inStoreSaleNotPlaced. addShipment refuses any other status with addShipment.badShipmentStatus. On updateShipment, naming a placed status for an order already placed and before its label, or echoing the stored status, changes nothing; a move the transitions do not allow (back to NEW once placed, or any status after the label or a cancel) is refused with updateShipment.illegalStatusTransition, with extensions.status (the stored status) and extensions.requestedStatus, both ShipmentStatusEnum names. Cancel with cancelShipment.
storeConnectionId - ObjectID The store connection this request comes from: the _id connectStore returned. Order ids are unique per connection, so the orderId duplicate check runs among this connection’s shipments, or, when omitted, among the eshop’s shipments that record no connection. Recorded when the shipment is created or its orderId first bound, never changed after. Refused with storeConnection.notFound when the eshop holds no such connection, storeConnection.platformMismatch when the Pircel-Platform header names another platform, and shipmentReference.storeConnectionMismatch when the shipment records another connection the eshop still holds.
storeFreeShipping - StoreFreeShippingInput Free shipping the store itself grants for the whole shipment. When no Pircel free-shipping rule applies, every carrier rate is priced with free delivery and the cash-on-delivery fee follows Eshop.storeFreeShippingCodFee; a Pircel rule that applies wins. Quote-time information: on an update, omitting it keeps the stored grant; while the order is a quote, granted: false clears it and re-prices. Once the order is placed (an orderId, or a status past NEW), an unchanged statement is accepted, granted: false included where no grant is stored, and a different one is refused with storeFreeShipping.lockedAfterPlacement.
idempotencyKey - String Caller-supplied idempotency key. A retry carrying the same key returns the original outcome instead of executing again. Use a UUIDv4 per logical operation, not per HTTP attempt: at most 255 printable ASCII characters, else idempotency.keyInvalid. The same key with another payload is refused with idempotency.keyReused, and one still in progress with idempotency.requestInProgress. A key is kept 24 hours from the end of its request. Without a key nothing is claimed and the request runs as sent.

Example

Query
mutation AddShipment(
  $buyerNotes: String,
  $checkout: ShipmentCheckoutInput,
  $eshopId: ObjectID,
  $geniki: GenikiInput,
  $holds: [StoreHoldInput!],
  $includeVat: Boolean,
  $isB2BInvoice: Boolean,
  $orderAmounts: OrderAmountsInput,
  $orderId: String,
  $parcels: [ParcelInput!],
  $paymentMethod: ShipmentPaymentMethodEnum,
  $products: [ProductInput!]!,
  $recipient: RecipientCreateInput,
  $recipientLogistics: RecipientLogisticsInput,
  $replacesShipment: ShipmentReplacementInput,
  $requestedOptions: [String!],
  $requiresShipping: Boolean,
  $selectedRate: SelectedRateInput,
  $senderNotes: String,
  $shipper: ShipperInput,
  $source: ShipmentSourceEnum,
  $status: ShipmentStatusEnum,
  $storeConnectionId: ObjectID,
  $storeFreeShipping: StoreFreeShippingInput,
  $idempotencyKey: String
) {
  addShipment(
    buyerNotes: $buyerNotes,
    checkout: $checkout,
    eshopId: $eshopId,
    geniki: $geniki,
    holds: $holds,
    includeVat: $includeVat,
    isB2BInvoice: $isB2BInvoice,
    orderAmounts: $orderAmounts,
    orderId: $orderId,
    parcels: $parcels,
    paymentMethod: $paymentMethod,
    products: $products,
    recipient: $recipient,
    recipientLogistics: $recipientLogistics,
    replacesShipment: $replacesShipment,
    requestedOptions: $requestedOptions,
    requiresShipping: $requiresShipping,
    selectedRate: $selectedRate,
    senderNotes: $senderNotes,
    shipper: $shipper,
    source: $source,
    status: $status,
    storeConnectionId: $storeConnectionId,
    storeFreeShipping: $storeFreeShipping,
    idempotencyKey: $idempotencyKey
  ) {
    _id
    auditLog {
      _id
      actor {
        ...UserFragment
      }
      actorType
      changes {
        ...ShipmentAuditChangeFragment
      }
      createdAt
      event
      metadata
      store {
        ...ShipmentAuditStoreOriginFragment
      }
      summary
    }
    availableRates {
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      error
      quotedAt
      rating
      refusals {
        ...RateRefusalFragment
      }
      services {
        ...ServiceFragment
      }
    }
    buyerNotes
    charge {
      buyer {
        ...ShipmentChargeFragment
      }
      carrier {
        ...ShipmentChargeFragment
      }
    }
    checkout {
      entryPoint
      flow
      isExpress
    }
    checkoutCompletedAt
    codCollectible {
      amount
      source
      status
    }
    codDeclaration {
      amount
      currency
      declaredAt
      source
      voucherCodes
    }
    collectedAt
    costSummary {
      deliveryCostCents
      productsTotalCents
      totalCostCents
      deliveryAmount {
        ...TaxedMoneyFragment
      }
      productsAmount {
        ...TaxedMoneyFragment
      }
      totalAmount {
        ...TaxedMoneyFragment
      }
      vatRate
    }
    createdAt
    documentUpload {
      available
      reason
    }
    effectiveDate
    eshop {
      _id
      address
      addressBook {
        ...AddressBookEntryTypeFragment
      }
      bookingsBlockedByPolicy
      brandAssets {
        ...BrandAssetsFragment
      }
      city
      deliveryCompanies {
        ...EshopDeliveryCompanyFragment
      }
      freeShipping {
        ...FreeShippingConfigFragment
      }
      general {
        ...GeneralConfigFragment
      }
      merchantNotices {
        ...MerchantNoticeRecordFragment
      }
      name
      packageInsurance
      pageCustomization {
        ...PageCustomizationFragment
      }
      phone
      policyAcceptances {
        ...PolicyAcceptanceFragment
      }
      postcode
      pricingEtag
      retentionHold {
        ...RetentionHoldFragment
      }
      securityValue
      slug
      storeConnections {
        ...StoreConnectionFragment
      }
      storeFreeShippingCodFee
      taxProfile {
        ...TaxProfileFragment
      }
    }
    freeShipping {
      applied
      appliedRegionSource
      appliedRuleId
      appliedRuleName
      checkoutDisplay
      codFeeCharged
      defaultCarrier {
        ...DeliveryCompanyFragment
      }
      discountAmount
      originalCost
      originalCostUnknownReason
      reason
      threshold
    }
    freeShippingDecision {
      applied
      cartValueCents
      cartValueSource
      codFeeChargedCents
      decidedAt
      frozen
      outcome
      regionSource
      ruleId
      ruleName
      thresholdBasis
      thresholdCents
    }
    geniki {
      chargeCode
      jobId
    }
    holds {
      note
      reason
      since
      source
    }
    isB2BInvoice
    notificationsSent {
      sentAt
      trigger
    }
    orderAmounts {
      amountDue
      anomalies {
        ...OrderAmountsAnomalyFragment
      }
      currency
      discountLines {
        ...OrderDiscountLineFragment
      }
      discountTotal
      feeLines {
        ...OrderFeeLineFragment
      }
      feesTotal
      grandTotal
      itemsSubtotal
      payments {
        ...OrderPaymentFragment
      }
      prepaidTotal
      pricesIncludeTax
      refundedTotal
      refunds {
        ...OrderRefundFragment
      }
      shippingTax
      shippingTotal
      taxLines {
        ...OrderTaxLineFragment
      }
      totalTax
    }
    orderId
    otherDocuments {
      documentType
      encodedDocument
      externalId
    }
    parcels {
      _id
      billableWeight
      contents {
        ...ParcelContentsFragment
      }
      dimensions {
        ...ParcelDimensionsFragment
      }
      returnVoucher {
        ...ParcelVoucherFragment
      }
      volumetricWeight
      voucher {
        ...ParcelVoucherFragment
      }
      weight
    }
    paymentMethod
    pickupAddress {
      address
      addressBookEntry
      city
      country
      countryCode
      name
      postcode
    }
    pickupDate
    pricingEtag
    products {
      _id
      categories
      countryOfOrigin
      description
      dimensions {
        ...ProductDimensionsFragment
      }
      externalId
      extraAttributes
      harmonizedSystemCode
      image
      kind
      lineDiscount
      lineSubtotal
      lineTotal
      metadata
      price
      quantity
      requiresShipping
      sku
      storeLineId
      title
      weight
    }
    productsQuantity
    recipient {
      address {
        ...AddressFragment
      }
      contact {
        ...ContactFragment
      }
    }
    recipientLogistics {
      companyName
      email
      phone
    }
    replacedBy {
      orderId
      shipmentId
    }
    replaces {
      orderId
      shipmentId
    }
    requestedOptions
    requiresShipping
    returnShipmentVoucher {
      code
      createdAt
      deliveryCompanyReference
      merchantReference
      status
    }
    selectedRate {
      costs {
        ...CostsFragment
      }
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      fulfillmentType
      negotiatedCosts {
        ...CostsFragment
      }
      negotiatedPriceComponents {
        ...PricingComponentFragment
      }
      priceComponents {
        ...PricingComponentFragment
      }
      pricingTrace {
        ...PricingTraceFragment
      }
      quoteBasis {
        ...QuoteBasisFragment
      }
      rating
      serviceCode
      serviceName
      transitTime {
        ...TransitTimeFragment
      }
    }
    senderNotes
    shipmentPurpose
    shipmentVoucher {
      code
      createdAt
      deliveryCompanyReference
      merchantReference
      status
    }
    shipper {
      address {
        ...AddressFragment
      }
      addressBookEntry
      contact {
        ...ContactFragment
      }
    }
    shippingRegionType
    status
    storeConnection {
      _id
      apiKey {
        ...StoreConnectionKeyFragment
      }
      capabilities
      consecutiveFailures
      createdAt
      credentialTransport
      disconnectedAt
      expiresAt
      externalId
      hintDelivery {
        ...StoreHintDeliveryFragment
      }
      hintSigningSecretSet
      hintUrl
      lastFailedAt
      lastFeedReadAt
      lastSyncedAt
      outboundBacklog {
        ...StoreOutboundBacklogFragment
      }
      platform
      pluginVersion
      restBaseUrl
      retiredAt
      scopes
      status
      storeCurrencyCode
      storeDomain
    }
    storeConnectionId
    storeFreeShipping {
      granted
      label
    }
    storeManagedFields
    storeShipments {
      createdAt
      recordedAt
      storeShipmentId
      tracks {
        ...StoreTrackFragment
      }
    }
    storeSync {
      ackedVersion
      appliedSourceVersion
      changedAt
      changedFields
      lastAckAt
      lastAckReason
      lastChangeOrigin
      lastError
      lastInboundAt
      state
      version
    }
    syncIssues {
      _id
      appliedValue
      availableActions
      detectedAt
      field
      kind
      operatorOnly
      resolution
      resolvedAt
      resolvedBy {
        ...UserFragment
      }
      severity
      sourceVersion
      storeValue
    }
    synthetic {
      expiresAt
      issuedAt
      nonce
      verifiedAt
    }
    trackingDetails {
      carrierTrackingUrl
      deliveredAt
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      eshopTrackingUrl
      estimatedDelivery
      events {
        ...TrackingEventFragment
      }
      isActive
      lastStatus
      lastSyncedAt
      lastUpdated
      nextPollAt
      returnToSender
      slaTier
      voucherCode
    }
    unassociatedVouchers {
      code
      rawDeliveryCompanyResponse
      reason
      status
    }
    unavailableRates {
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      error
      quotedAt
      rating
      refusals {
        ...RateRefusalFragment
      }
      services {
        ...ServiceFragment
      }
    }
    vatDetails {
      basisContradiction
      basisSource
      valueAddedTaxIncluded
    }
    viewerCanOverrideStoreManagedFields
    viewerEditableStoreManagedFields
  }
}
Variables
{
  "buyerNotes": "abc123",
  "checkout": ShipmentCheckoutInput,
  "eshopId": "5e5677d71bdc2ae76344968c",
  "geniki": GenikiInput,
  "holds": [StoreHoldInput],
  "includeVat": true,
  "isB2BInvoice": false,
  "orderAmounts": OrderAmountsInput,
  "orderId": "xyz789",
  "parcels": [ParcelInput],
  "paymentMethod": "AFTERPAY_CLEARPAY",
  "products": [ProductInput],
  "recipient": RecipientCreateInput,
  "recipientLogistics": RecipientLogisticsInput,
  "replacesShipment": ShipmentReplacementInput,
  "requestedOptions": ["abc123"],
  "requiresShipping": true,
  "selectedRate": SelectedRateInput,
  "senderNotes": "xyz789",
  "shipper": ShipperInput,
  "source": "CHECKOUT",
  "status": "BOOKING_UNRESOLVED",
  "storeConnectionId": "5e5677d71bdc2ae76344968c",
  "storeFreeShipping": StoreFreeShippingInput,
  "idempotencyKey": "xyz789"
}
Response
{
  "data": {
    "addShipment": {
      "_id": "5e5677d71bdc2ae76344968c",
      "auditLog": [ShipmentAuditEntry],
      "availableRates": [DeliveryRate],
      "buyerNotes": "xyz789",
      "charge": ShipmentCharges,
      "checkout": ShipmentCheckout,
      "checkoutCompletedAt": "2007-12-03T10:15:30Z",
      "codCollectible": CodCollectible,
      "codDeclaration": CodDeclaration,
      "collectedAt": "2007-12-03T10:15:30Z",
      "costSummary": CostSummary,
      "createdAt": "2007-12-03T10:15:30Z",
      "documentUpload": DocumentUploadEligibility,
      "effectiveDate": "2007-12-03T10:15:30Z",
      "eshop": Eshop,
      "freeShipping": ShipmentFreeShipping,
      "freeShippingDecision": FreeShippingDecision,
      "geniki": GenikiFields,
      "holds": [ShipmentHold],
      "isB2BInvoice": true,
      "notificationsSent": [NotificationSent],
      "orderAmounts": OrderAmounts,
      "orderId": "xyz789",
      "otherDocuments": [OtherDocument],
      "parcels": [Parcel],
      "paymentMethod": "AFTERPAY_CLEARPAY",
      "pickupAddress": PickupAddress,
      "pickupDate": "2007-12-03",
      "pricingEtag": "abc123",
      "products": [Product],
      "productsQuantity": 987,
      "recipient": Recipient,
      "recipientLogistics": RecipientLogistics,
      "replacedBy": ShipmentLink,
      "replaces": ShipmentLink,
      "requestedOptions": ["abc123"],
      "requiresShipping": false,
      "returnShipmentVoucher": ShipmentVoucher,
      "selectedRate": SelectedRate,
      "senderNotes": "abc123",
      "shipmentPurpose": "GIFT",
      "shipmentVoucher": ShipmentVoucher,
      "shipper": Shipper,
      "shippingRegionType": "DOMESTIC",
      "status": "BOOKING_UNRESOLVED",
      "storeConnection": StoreConnection,
      "storeConnectionId": "5e5677d71bdc2ae76344968c",
      "storeFreeShipping": ShipmentStoreFreeShipping,
      "storeManagedFields": ["CANCELLATION"],
      "storeShipments": [StoreShipment],
      "storeSync": ShipmentStoreSync,
      "syncIssues": [ShipmentSyncIssue],
      "synthetic": ShipmentSynthetic,
      "trackingDetails": TrackingDetails,
      "unassociatedVouchers": [UnassociatedVoucher],
      "unavailableRates": [DeliveryRate],
      "vatDetails": VatDetails,
      "viewerCanOverrideStoreManagedFields": false,
      "viewerEditableStoreManagedFields": ["CANCELLATION"]
    }
  }
}

cancelShipment

Description

Cancel a shipment whether or not a label was ever printed — the lever for an order canceled in the store before printing, which cancelVoucher cannot reach because it has no voucher to act on. Any live voucher is canceled at the carrier first; a carrier that refuses aborts the call and the shipment keeps its status. Refused with cancelShipment.alreadyProgressed once the parcel has moved, and from PICKUP_LIST_CREATED for anyone but an operator, with extensions.status set to the status as Shipment.status returns it, a ShipmentStatusEnum name; refused with cancelShipment.syntheticForbidden for a synthetic-monitoring shipment. A shipment saved concurrently while the call runs is decided again once; cancelShipment.conflict (retry it) means it was saved again, or changed in a way this call cannot settle. A label the call voided by then reads canceled where it could be recorded, and the shipment may be left at VOUCHER_CANCELED until the retry cancels it; where it could not, the label still reads active and Pircel is alerted. Idempotent: calling it on an already-canceled shipment succeeds and returns the shipment. This is the one way to cancel a shipment.

Response

Returns a CancelShipmentPayload!

Arguments
Name Description
eshopId - ObjectID Required if the user belongs to or owns multiple eshops. Admins must specify an eshop. Not required for eshop integrations.
idempotencyKey - String Caller-supplied idempotency key. A retry carrying the same key returns the original outcome instead of reaching the carrier again. Use a UUIDv4 per logical operation, not per HTTP attempt: at most 255 printable ASCII characters, else idempotency.keyInvalid. The same key with another payload is refused with idempotency.keyReused, and one still in progress with idempotency.requestInProgress. A key is kept 24 hours from the end of its request. Without a key nothing is claimed and the request runs as sent.
orderId - String The order id. Either orderId or shipmentId must be provided
shipmentId - ObjectID The shipment id. Either orderId or shipmentId must be provided
storeConnectionId - ObjectID The store connection this request comes from: the _id connectStore returned. With orderId alone, the order is looked up among this connection’s shipments only, or, when omitted, among the eshop’s shipments that record no connection; several matches there are refused with shipmentReference.ambiguous, naming them in extensions.shipmentIds. With shipmentId, refused with shipmentReference.storeConnectionMismatch when the shipment records another connection the eshop still holds. Refused with storeConnection.notFound when the eshop holds no such connection, and storeConnection.platformMismatch when the Pircel-Platform header names another platform.

Example

Query
mutation CancelShipment(
  $eshopId: ObjectID,
  $idempotencyKey: String,
  $orderId: String,
  $shipmentId: ObjectID,
  $storeConnectionId: ObjectID
) {
  cancelShipment(
    eshopId: $eshopId,
    idempotencyKey: $idempotencyKey,
    orderId: $orderId,
    shipmentId: $shipmentId,
    storeConnectionId: $storeConnectionId
  ) {
    canceledCodes
    shipment {
      _id
      auditLog {
        ...ShipmentAuditEntryFragment
      }
      availableRates {
        ...DeliveryRateFragment
      }
      buyerNotes
      charge {
        ...ShipmentChargesFragment
      }
      checkout {
        ...ShipmentCheckoutFragment
      }
      checkoutCompletedAt
      codCollectible {
        ...CodCollectibleFragment
      }
      codDeclaration {
        ...CodDeclarationFragment
      }
      collectedAt
      costSummary {
        ...CostSummaryFragment
      }
      createdAt
      documentUpload {
        ...DocumentUploadEligibilityFragment
      }
      effectiveDate
      eshop {
        ...EshopFragment
      }
      freeShipping {
        ...ShipmentFreeShippingFragment
      }
      freeShippingDecision {
        ...FreeShippingDecisionFragment
      }
      geniki {
        ...GenikiFieldsFragment
      }
      holds {
        ...ShipmentHoldFragment
      }
      isB2BInvoice
      notificationsSent {
        ...NotificationSentFragment
      }
      orderAmounts {
        ...OrderAmountsFragment
      }
      orderId
      otherDocuments {
        ...OtherDocumentFragment
      }
      parcels {
        ...ParcelFragment
      }
      paymentMethod
      pickupAddress {
        ...PickupAddressFragment
      }
      pickupDate
      pricingEtag
      products {
        ...ProductFragment
      }
      productsQuantity
      recipient {
        ...RecipientFragment
      }
      recipientLogistics {
        ...RecipientLogisticsFragment
      }
      replacedBy {
        ...ShipmentLinkFragment
      }
      replaces {
        ...ShipmentLinkFragment
      }
      requestedOptions
      requiresShipping
      returnShipmentVoucher {
        ...ShipmentVoucherFragment
      }
      selectedRate {
        ...SelectedRateFragment
      }
      senderNotes
      shipmentPurpose
      shipmentVoucher {
        ...ShipmentVoucherFragment
      }
      shipper {
        ...ShipperFragment
      }
      shippingRegionType
      status
      storeConnection {
        ...StoreConnectionFragment
      }
      storeConnectionId
      storeFreeShipping {
        ...ShipmentStoreFreeShippingFragment
      }
      storeManagedFields
      storeShipments {
        ...StoreShipmentFragment
      }
      storeSync {
        ...ShipmentStoreSyncFragment
      }
      syncIssues {
        ...ShipmentSyncIssueFragment
      }
      synthetic {
        ...ShipmentSyntheticFragment
      }
      trackingDetails {
        ...TrackingDetailsFragment
      }
      unassociatedVouchers {
        ...UnassociatedVoucherFragment
      }
      unavailableRates {
        ...DeliveryRateFragment
      }
      vatDetails {
        ...VatDetailsFragment
      }
      viewerCanOverrideStoreManagedFields
      viewerEditableStoreManagedFields
    }
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "idempotencyKey": "xyz789",
  "orderId": "xyz789",
  "shipmentId": "5e5677d71bdc2ae76344968c",
  "storeConnectionId": "5e5677d71bdc2ae76344968c"
}
Response
{
  "data": {
    "cancelShipment": {
      "canceledCodes": ["xyz789"],
      "shipment": Shipment
    }
  }
}

cancelVoucher

Description

Cancel every active voucher on a shipment. Returns a CancelVoucherPayload with the updated shipment and the carrier-confirmed canceled codes. Only a VOUCHER_CREATED shipment has vouchers to cancel; any other is refused with cancelVoucher.shipmentAlreadyProgressed, with extensions.status set to the status as Shipment.status returns it, a ShipmentStatusEnum name, so a CANCELED or VOUCHER_CANCELED shipment reads as such rather than as one that moved. One that holds no active voucher is refused with cancelVoucher.noActiveVouchers, whatever its carrier. A shipment saved concurrently while the call runs is decided again without asking the carrier twice: the call succeeds at VOUCHER_CANCELED once the voided label reads canceled on it, answers cancelVoucher.shipmentAlreadyProgressed when another write already left it dead, and cancelVoucher.conflict (retry it) when it could not be made to read canceled.

Response

Returns a CancelVoucherPayload!

Arguments
Name Description
eshopId - ObjectID Required if the user belongs to or owns multiple eshops. Admins must specify an eshop. Not required for eshop integrations.
idempotencyKey - String Caller-supplied idempotency key. A retry carrying the same key returns the original outcome instead of reaching the carrier again. Use a UUIDv4 per logical operation, not per HTTP attempt: at most 255 printable ASCII characters, else idempotency.keyInvalid. The same key with another payload is refused with idempotency.keyReused, and one still in progress with idempotency.requestInProgress. A key is kept 24 hours from the end of its request. Without a key nothing is claimed and the request runs as sent.
orderId - String The order id. Either orderId or shipmentId must be provided
shipmentId - ObjectID The shipment id. Either orderId or shipmentId must be provided
storeConnectionId - ObjectID The store connection this request comes from: the _id connectStore returned. With orderId alone, the order is looked up among this connection’s shipments only, or, when omitted, among the eshop’s shipments that record no connection; several matches there are refused with shipmentReference.ambiguous, naming them in extensions.shipmentIds. With shipmentId, refused with shipmentReference.storeConnectionMismatch when the shipment records another connection the eshop still holds. Refused with storeConnection.notFound when the eshop holds no such connection, and storeConnection.platformMismatch when the Pircel-Platform header names another platform.

Example

Query
mutation CancelVoucher(
  $eshopId: ObjectID,
  $idempotencyKey: String,
  $orderId: String,
  $shipmentId: ObjectID,
  $storeConnectionId: ObjectID
) {
  cancelVoucher(
    eshopId: $eshopId,
    idempotencyKey: $idempotencyKey,
    orderId: $orderId,
    shipmentId: $shipmentId,
    storeConnectionId: $storeConnectionId
  ) {
    canceledCodes
    shipment {
      _id
      auditLog {
        ...ShipmentAuditEntryFragment
      }
      availableRates {
        ...DeliveryRateFragment
      }
      buyerNotes
      charge {
        ...ShipmentChargesFragment
      }
      checkout {
        ...ShipmentCheckoutFragment
      }
      checkoutCompletedAt
      codCollectible {
        ...CodCollectibleFragment
      }
      codDeclaration {
        ...CodDeclarationFragment
      }
      collectedAt
      costSummary {
        ...CostSummaryFragment
      }
      createdAt
      documentUpload {
        ...DocumentUploadEligibilityFragment
      }
      effectiveDate
      eshop {
        ...EshopFragment
      }
      freeShipping {
        ...ShipmentFreeShippingFragment
      }
      freeShippingDecision {
        ...FreeShippingDecisionFragment
      }
      geniki {
        ...GenikiFieldsFragment
      }
      holds {
        ...ShipmentHoldFragment
      }
      isB2BInvoice
      notificationsSent {
        ...NotificationSentFragment
      }
      orderAmounts {
        ...OrderAmountsFragment
      }
      orderId
      otherDocuments {
        ...OtherDocumentFragment
      }
      parcels {
        ...ParcelFragment
      }
      paymentMethod
      pickupAddress {
        ...PickupAddressFragment
      }
      pickupDate
      pricingEtag
      products {
        ...ProductFragment
      }
      productsQuantity
      recipient {
        ...RecipientFragment
      }
      recipientLogistics {
        ...RecipientLogisticsFragment
      }
      replacedBy {
        ...ShipmentLinkFragment
      }
      replaces {
        ...ShipmentLinkFragment
      }
      requestedOptions
      requiresShipping
      returnShipmentVoucher {
        ...ShipmentVoucherFragment
      }
      selectedRate {
        ...SelectedRateFragment
      }
      senderNotes
      shipmentPurpose
      shipmentVoucher {
        ...ShipmentVoucherFragment
      }
      shipper {
        ...ShipperFragment
      }
      shippingRegionType
      status
      storeConnection {
        ...StoreConnectionFragment
      }
      storeConnectionId
      storeFreeShipping {
        ...ShipmentStoreFreeShippingFragment
      }
      storeManagedFields
      storeShipments {
        ...StoreShipmentFragment
      }
      storeSync {
        ...ShipmentStoreSyncFragment
      }
      syncIssues {
        ...ShipmentSyncIssueFragment
      }
      synthetic {
        ...ShipmentSyntheticFragment
      }
      trackingDetails {
        ...TrackingDetailsFragment
      }
      unassociatedVouchers {
        ...UnassociatedVoucherFragment
      }
      unavailableRates {
        ...DeliveryRateFragment
      }
      vatDetails {
        ...VatDetailsFragment
      }
      viewerCanOverrideStoreManagedFields
      viewerEditableStoreManagedFields
    }
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "idempotencyKey": "xyz789",
  "orderId": "xyz789",
  "shipmentId": "5e5677d71bdc2ae76344968c",
  "storeConnectionId": "5e5677d71bdc2ae76344968c"
}
Response
{
  "data": {
    "cancelVoucher": {
      "canceledCodes": ["abc123"],
      "shipment": Shipment
    }
  }
}

createPickupList

Description

Create pickup lists for all delivery companies which had been chosen for this pickup date

Response

Returns a CreatePickupListReturn

Arguments
Name Description
eshopId - ObjectID Optional if user belongs to single eshop; required for admins or multiple eshops
pickupDate - String! Date "YYYY-MM-DD" that the delivery companies should pick up shipments
pickupTimes - [PickupTimeInput!]! List of per-company pickup time inputs
shipmentIds - [ObjectID!]! Array of shipment IDs to include in the pickup list.

Example

Query
mutation CreatePickupList(
  $eshopId: ObjectID,
  $pickupDate: String!,
  $pickupTimes: [PickupTimeInput!]!,
  $shipmentIds: [ObjectID!]!
) {
  createPickupList(
    eshopId: $eshopId,
    pickupDate: $pickupDate,
    pickupTimes: $pickupTimes,
    shipmentIds: $shipmentIds
  ) {
    lists {
      closeTime
      code
      deliveryCompany {
        ...DeliveryCompanyFragment
      }
      printDocument
      readyTime
    }
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "pickupDate": "xyz789",
  "pickupTimes": [PickupTimeInput],
  "shipmentIds": [
    "5e5677d71bdc2ae76344968c"
  ]
}
Response
{
  "data": {
    "createPickupList": {"lists": [PickupListsList]}
  }
}

createVoucher

Description

Create the carrier voucher(s) for a shipment. Returns a CreateVoucherPayload wrapping the updated shipment; read voucher state off payload.shipment.shipmentVoucher and payload.shipment.parcels[i].voucher. A shipment with a live label is returned as it is, with createdCodes empty. Otherwise only a placed order before its label, a CHECKOUT_COMPLETE, MANUALLY_CREATED or VOUCHER_CANCELED shipment, is labelled; any other, a NEW quote included, is refused with createVoucher.shipmentNotLabellable, before the carrier is asked, with extensions.status set to the status as Shipment.status returns it, a ShipmentStatusEnum name. A shipment whose stored recipient lacks a street (addressLine1), country code, city, or a name (first and last name, or company) is refused with createVoucher.recipientIncomplete, also before the carrier is asked: extensions.issues lists each missing field as { code: shipmentInput.required, field, type }, with the first in extensions.field. A quote stores none of the street or name, so restate the recipient with updateShipment when booking.

Response

Returns a CreateVoucherPayload!

Arguments
Name Description
eshopId - ObjectID Required if the user belongs to or owns multiple eshops. Admins must specify an eshop. Not required for eshop integrations.
generateCommercialInvoice - Boolean Whether to generate a commercial invoice. Defaults to true for international shipments.
idempotencyKey - String Caller-supplied idempotency key. A retry carrying the same key returns the original outcome instead of executing again. Use a UUIDv4 per logical operation, not per HTTP attempt: at most 255 printable ASCII characters, else idempotency.keyInvalid. The same key with another payload is refused with idempotency.keyReused, and one still in progress with idempotency.requestInProgress. A key is kept 24 hours from the end of its request. Without a key nothing is claimed and the request runs as sent.
includeBuyerNotes - Boolean Whether to send the buyer's own delivery notes (Shipment.buyerNotes) to the carrier, appended to notes and never replacing it. Omit to follow the eshop's general.voucher.includeBuyerNotes setting; when that is unset too, buyer notes are NOT sent.
notes - String Notes/comments for the delivery company. Sent as given; includeBuyerNotes may append the buyer's own notes after them.
orderId - String The id of the order. Either orderId or shipmentId must be provided
pickupDate - String Date "YYYY-MM-DD" that the delivery company should receive the package from the shop. Defaults to today.
shipmentId - ObjectID The id of the shipment. Either orderId or shipmentId must be provided
shipmentPurpose - ShipmentPurposeEnum The purpose of the shipment
storeConnectionId - ObjectID The store connection this request comes from: the _id connectStore returned. With orderId alone, the order is looked up among this connection’s shipments only, or, when omitted, among the eshop’s shipments that record no connection; several matches there are refused with shipmentReference.ambiguous, naming them in extensions.shipmentIds. With shipmentId, refused with shipmentReference.storeConnectionMismatch when the shipment records another connection the eshop still holds. Refused with storeConnection.notFound when the eshop holds no such connection, and storeConnection.platformMismatch when the Pircel-Platform header names another platform.

Example

Query
mutation CreateVoucher(
  $eshopId: ObjectID,
  $generateCommercialInvoice: Boolean,
  $idempotencyKey: String,
  $includeBuyerNotes: Boolean,
  $notes: String,
  $orderId: String,
  $pickupDate: String,
  $shipmentId: ObjectID,
  $shipmentPurpose: ShipmentPurposeEnum,
  $storeConnectionId: ObjectID
) {
  createVoucher(
    eshopId: $eshopId,
    generateCommercialInvoice: $generateCommercialInvoice,
    idempotencyKey: $idempotencyKey,
    includeBuyerNotes: $includeBuyerNotes,
    notes: $notes,
    orderId: $orderId,
    pickupDate: $pickupDate,
    shipmentId: $shipmentId,
    shipmentPurpose: $shipmentPurpose,
    storeConnectionId: $storeConnectionId
  ) {
    createdCodes
    shipment {
      _id
      auditLog {
        ...ShipmentAuditEntryFragment
      }
      availableRates {
        ...DeliveryRateFragment
      }
      buyerNotes
      charge {
        ...ShipmentChargesFragment
      }
      checkout {
        ...ShipmentCheckoutFragment
      }
      checkoutCompletedAt
      codCollectible {
        ...CodCollectibleFragment
      }
      codDeclaration {
        ...CodDeclarationFragment
      }
      collectedAt
      costSummary {
        ...CostSummaryFragment
      }
      createdAt
      documentUpload {
        ...DocumentUploadEligibilityFragment
      }
      effectiveDate
      eshop {
        ...EshopFragment
      }
      freeShipping {
        ...ShipmentFreeShippingFragment
      }
      freeShippingDecision {
        ...FreeShippingDecisionFragment
      }
      geniki {
        ...GenikiFieldsFragment
      }
      holds {
        ...ShipmentHoldFragment
      }
      isB2BInvoice
      notificationsSent {
        ...NotificationSentFragment
      }
      orderAmounts {
        ...OrderAmountsFragment
      }
      orderId
      otherDocuments {
        ...OtherDocumentFragment
      }
      parcels {
        ...ParcelFragment
      }
      paymentMethod
      pickupAddress {
        ...PickupAddressFragment
      }
      pickupDate
      pricingEtag
      products {
        ...ProductFragment
      }
      productsQuantity
      recipient {
        ...RecipientFragment
      }
      recipientLogistics {
        ...RecipientLogisticsFragment
      }
      replacedBy {
        ...ShipmentLinkFragment
      }
      replaces {
        ...ShipmentLinkFragment
      }
      requestedOptions
      requiresShipping
      returnShipmentVoucher {
        ...ShipmentVoucherFragment
      }
      selectedRate {
        ...SelectedRateFragment
      }
      senderNotes
      shipmentPurpose
      shipmentVoucher {
        ...ShipmentVoucherFragment
      }
      shipper {
        ...ShipperFragment
      }
      shippingRegionType
      status
      storeConnection {
        ...StoreConnectionFragment
      }
      storeConnectionId
      storeFreeShipping {
        ...ShipmentStoreFreeShippingFragment
      }
      storeManagedFields
      storeShipments {
        ...StoreShipmentFragment
      }
      storeSync {
        ...ShipmentStoreSyncFragment
      }
      syncIssues {
        ...ShipmentSyncIssueFragment
      }
      synthetic {
        ...ShipmentSyntheticFragment
      }
      trackingDetails {
        ...TrackingDetailsFragment
      }
      unassociatedVouchers {
        ...UnassociatedVoucherFragment
      }
      unavailableRates {
        ...DeliveryRateFragment
      }
      vatDetails {
        ...VatDetailsFragment
      }
      viewerCanOverrideStoreManagedFields
      viewerEditableStoreManagedFields
    }
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "generateCommercialInvoice": false,
  "idempotencyKey": "xyz789",
  "includeBuyerNotes": true,
  "notes": "xyz789",
  "orderId": "abc123",
  "pickupDate": "xyz789",
  "shipmentId": "5e5677d71bdc2ae76344968c",
  "shipmentPurpose": "GIFT",
  "storeConnectionId": "5e5677d71bdc2ae76344968c"
}
Response
{
  "data": {
    "createVoucher": {
      "createdCodes": ["abc123"],
      "shipment": Shipment
    }
  }
}

findShipmentByOrder

Description

Find the buyer's shipment for an order from the email or phone it was placed with, and unlock its VERIFIED tracking view. When several shipments of the order match, the answer is the most recent one that is not canceled, or the most recent one when all are canceled. Errors with findShipmentByOrder.emptyOrderId (blank order id); the other errors as verifyTrackingAccess. Errors with trackingAccess.contactEmpty (blank contact), trackingAccess.verificationFailed (no match: the same answer whether or not the target exists), tooManyRequests with extensions.retryAfter in seconds (5 failed attempts on the target from one client in 15 minutes, which blocks that client for 15 minutes; 20 on the target from any clients in an hour; 10 from the client in 15 minutes; or the client blocked by trackShipment), and trackingAccess.unavailable (verified tracking is switched off). A tracking link with its token still unlocks the view during a refusal.

Response

Returns a TrackingOrderLookup!

Arguments
Name Description
contact - String! The email or the phone the order was placed with. An email is compared case-insensitively; a phone in E.164, with the destination country as the default region.
eshopId - ObjectID!
orderId - String! The order number the buyer was given.

Example

Query
mutation FindShipmentByOrder(
  $contact: String!,
  $eshopId: ObjectID!,
  $orderId: String!
) {
  findShipmentByOrder(
    contact: $contact,
    eshopId: $eshopId,
    orderId: $orderId
  ) {
    accessToken
    expiresAt
    shipmentId
  }
}
Variables
{
  "contact": "abc123",
  "eshopId": "5e5677d71bdc2ae76344968c",
  "orderId": "abc123"
}
Response
{
  "data": {
    "findShipmentByOrder": {
      "accessToken": "abc123",
      "expiresAt": "2007-12-03T10:15:30Z",
      "shipmentId": "5e5677d71bdc2ae76344968c"
    }
  }
}

printVoucher

Description

Print labels for one shipment in a single merged PDF. Labels are placed according to the carrier's configured outputMedium and stickerLayout: slot-grid snapping for sticker-paper customers, FFDH-packed onto the configured paper sheet for free-canvas customers, or concatenated at native cropped dimensions for thermal-printer customers. Multi-parcel shipments are merged into one document so callers receive a single printable file regardless of parcel count.

Response

Returns a PrintVoucherPayload!

Arguments
Name Description
eshopId - ObjectID Required if the user belongs to or owns multiple eshops. Admins must specify an eshop. Not required for eshop integrations.
orderId - String The order id. Either orderId or shipmentId must be provided
shipmentId - ObjectID The shipment id. Either orderId or shipmentId must be provided
storeConnectionId - ObjectID The store connection this request comes from: the _id connectStore returned. With orderId alone, the order is looked up among this connection’s shipments only, or, when omitted, among the eshop’s shipments that record no connection; several matches there are refused with shipmentReference.ambiguous, naming them in extensions.shipmentIds. With shipmentId, refused with shipmentReference.storeConnectionMismatch when the shipment records another connection the eshop still holds. Refused with storeConnection.notFound when the eshop holds no such connection, and storeConnection.platformMismatch when the Pircel-Platform header names another platform.

Example

Query
mutation PrintVoucher(
  $eshopId: ObjectID,
  $orderId: String,
  $shipmentId: ObjectID,
  $storeConnectionId: ObjectID
) {
  printVoucher(
    eshopId: $eshopId,
    orderId: $orderId,
    shipmentId: $shipmentId,
    storeConnectionId: $storeConnectionId
  ) {
    document
  }
}
Variables
{
  "eshopId": "5e5677d71bdc2ae76344968c",
  "orderId": "xyz789",
  "shipmentId": "5e5677d71bdc2ae76344968c",
  "storeConnectionId": "5e5677d71bdc2ae76344968c"
}
Response
{
  "data": {
    "printVoucher": {"document": "abc123"}
  }
}

recordCookieConsent

Description

Records a visitor's cookie choice for pircel.com, anonymously and append-only: every call is a new record, a withdrawal included, and none is linked to a user even when the request carries a session. Records are kept 24 months. Refused with cookieConsent.invalidInput (extensions.field: consentId not a UUID v4, or policyVersion not a calendar date or later than tomorrow), tooManyRequests (over 30 from one client in an hour) or cookieConsent.tooMany (over 20 for one consentId in 24 hours).

Response

Returns a CookieConsentRecordPayload!

Arguments
Name Description
input - CookieConsentRecordInput!

Example

Query
mutation RecordCookieConsent($input: CookieConsentRecordInput!) {
  recordCookieConsent(input: $input) {
    recordedAt
  }
}
Variables
{"input": CookieConsentRecordInput}
Response
{
  "data": {
    "recordCookieConsent": {
      "recordedAt": "2007-12-03T10:15:30Z"
    }
  }
}

verifyTrackingAccess

Description

Unlock the VERIFIED tracking view of a shipment with the email or phone the order was placed with, for a link without a token, an expired link or a pasted id. Errors with trackingAccess.contactEmpty (blank contact), trackingAccess.verificationFailed (no match: the same answer whether or not the target exists), tooManyRequests with extensions.retryAfter in seconds (5 failed attempts on the target from one client in 15 minutes, which blocks that client for 15 minutes; 20 on the target from any clients in an hour; 10 from the client in 15 minutes; or the client blocked by trackShipment), and trackingAccess.unavailable (verified tracking is switched off). A tracking link with its token still unlocks the view during a refusal.

Response

Returns a TrackingAccessGrant!

Arguments
Name Description
contact - String! The email or the phone the order was placed with. An email is compared case-insensitively; a phone in E.164, with the destination country as the default region.
eshopId - ObjectID!
shipmentId - ObjectID!

Example

Query
mutation VerifyTrackingAccess(
  $contact: String!,
  $eshopId: ObjectID!,
  $shipmentId: ObjectID!
) {
  verifyTrackingAccess(
    contact: $contact,
    eshopId: $eshopId,
    shipmentId: $shipmentId
  ) {
    accessToken
    expiresAt
  }
}
Variables
{
  "contact": "abc123",
  "eshopId": "5e5677d71bdc2ae76344968c",
  "shipmentId": "5e5677d71bdc2ae76344968c"
}
Response
{
  "data": {
    "verifyTrackingAccess": {
      "accessToken": "xyz789",
      "expiresAt": "2007-12-03T10:15:30Z"
    }
  }
}

Types

Address

Fields
Field Name Description
addressLine1 - String Address line 1 (original input).
addressLine2 - String Address line 2 (original input).
addressLine3 - String Address line 3 (original input).
canonicalAddress - CanonicalAddress The geocoder's match for the address.
city - String City (original input).
country - String Country (original input).
countryCode - String Country code in ISO 3166-1 alpha-2 format.
county - String County (original input).
postcode - String Postcode (original input).
Example
{
  "addressLine1": "abc123",
  "addressLine2": "xyz789",
  "addressLine3": "abc123",
  "canonicalAddress": CanonicalAddress,
  "city": "abc123",
  "country": "xyz789",
  "countryCode": "abc123",
  "county": "abc123",
  "postcode": "abc123"
}

AddressBookEntryType

Fields
Field Name Description
_id - ObjectID ID.
address - Address Address details.
contact - Contact Contact details.
isDefault - Boolean Is default.
name - String Name.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "address": Address,
  "contact": Contact,
  "isDefault": true,
  "name": "abc123"
}

AddressInput

Description

Free text is trimmed. On a shipment update, an absent field keeps the stored value and null or blank clears it; an empty object changes nothing.

Fields
Input Field Description
addressLine1 - String Address line 1.
addressLine2 - String Address line 2.
addressLine3 - String Address line 3.
city - String City.
country - String Country.
countryCode - String Country code in ISO 3166-1 alpha-2 format.
county - String County.
postcode - String Postcode.
Example
{
  "addressLine1": "xyz789",
  "addressLine2": "xyz789",
  "addressLine3": "xyz789",
  "city": "xyz789",
  "country": "xyz789",
  "countryCode": "xyz789",
  "county": "abc123",
  "postcode": "abc123"
}

AddressTypeEnum

Description

Type of address location from Google Places API

Values
Enum Value Description

BUSINESS

Business address (offices, stores, commercial buildings)

MIXED

Mixed-use address (both residential and business)

RESIDENTIAL

Residential address (homes, apartments)
Example
"BUSINESS"

AppliedRegionSourceEnum

Values
Enum Value Description

REST_OF_WORLD

Free shipping was applied via the rest-of-world fallback deal

RULE

Free shipping was applied via a named regional rule
Example
"REST_OF_WORLD"

AuditActorTypeEnum

Description

Which kind of caller performed an audited action.

Values
Enum Value Description

ADMIN

An authenticated admin user

API_KEY

A direct API-key integration (no user, no actor id)

ESHOP_USER

An authenticated eshop user

SYSTEM

The system itself (backfills, automated processes)
Example
"ADMIN"

Boolean

Description

The Boolean scalar type represents true or false.

BrandAssets

Fields
Field Name Description
logos - BrandLogos
Example
{"logos": BrandLogos}

BrandColorScheme

Description

Color scheme for UI theming

Fields
Field Name Description
accent - String Accent color for CTAs (hex)
background - String Background color (hex)
primary - String Primary brand color (hex)
secondary - String Secondary brand color (hex)
Example
{
  "accent": "xyz789",
  "background": "xyz789",
  "primary": "xyz789",
  "secondary": "abc123"
}

BrandLogos

Description

Brand logos for different usage contexts

Fields
Field Name Description
horizontal - Logo Horizontal logo for headers
icon - Logo Small icon for favicons
primary - Logo Main brand logo
Example
{
  "horizontal": Logo,
  "icon": Logo,
  "primary": Logo
}

CancelShipmentPayload

Description

Result of cancelShipment. Wraps the canceled shipment plus the voucher codes this call killed at the carrier.

Fields
Field Name Description
canceledCodes - [String!]! Voucher codes canceled at the carrier by THIS invocation. Empty for a shipment that never had a label — the ordinary case, since the mutation exists for orders canceled before printing — and empty on the idempotent repeat, so it never claims a cancellation that did not happen. Read shipment.shipmentVoucher and shipment.parcels[i].voucher for the shipment's own voucher state.
shipment - Shipment! The shipment at status: canceled. Returned on a repeat call too rather than an error, so a caller that lost the first response can converge on the same state instead of retrying forever.
Example
{
  "canceledCodes": ["xyz789"],
  "shipment": Shipment
}

CancelVoucherPayload

Description

Result of cancelVoucher. Wraps the updated shipment plus the list of voucher codes the carrier confirmed canceled by this call.

Fields
Field Name Description
canceledCodes - [String!]! Carrier-confirmed voucher codes canceled by this call. For carriers with API integration this is the carrier's exact confirmation list; for non-API carriers it's every active voucher code on the shipment immediately before cancellation. Useful for distinguishing 'just canceled' from 'previously canceled' when auditing.
shipment - Shipment! The shipment after cancellation. All voucher slots will have status: canceled and shipment.status will be voucher-canceled. trackingDetails is cleared.
Example
{
  "canceledCodes": ["abc123"],
  "shipment": Shipment
}

CancellationCapability

Fields
Field Name Description
mode - VoucherCancellationModeEnum!
Example
{"mode": "CASCADE"}

CanonicalAddress

Description

The geocoder's match for the address; canonical only when it agrees with the typed country and postcode. Not a pricing input for the destination.

Fields
Field Name Description
addressLine1 - String Canonicalized primary address line.
addressType - AddressTypeEnum Type of address location (residential, business, mixed)
city - String Canonicalized city.
coordinates - Coordinates Geographic coordinates.
country - String Canonicalized country.
countryCode - String Canonicalized country code in ISO 3166-1 alpha-2 format.
county - String Canonicalized county.
isCanonical - Boolean True when the geocoder's match agrees with the typed country and postcode.
placeId - String Google Places API unique place identifier for future lookups
postcode - String Canonicalized postcode.
Example
{
  "addressLine1": "xyz789",
  "addressType": "BUSINESS",
  "city": "xyz789",
  "coordinates": Coordinates,
  "country": "abc123",
  "countryCode": "xyz789",
  "county": "abc123",
  "isCanonical": true,
  "placeId": "abc123",
  "postcode": "xyz789"
}

CarrierConstraintKind

Values
Enum Value Description

WEIGHT

DESTINATION

DELIVERY_DAY

DIMENSIONS

AMOUNT

PARCEL_COUNT

Example
"WEIGHT"

CarrierOptionTrigger

Description

REQUESTED: the buyer or merchant asks for it. PAYMENT_METHOD: derived from the order. BILLING: derived from a shipment flag.

Values
Enum Value Description

REQUESTED

PAYMENT_METHOD

BILLING

Example
"REQUESTED"

CarrierProfileSourceEnum

Values
Enum Value Description

CODE

DB

MERCHANT_CONTRACTED

Example
"CODE"

ChargeActor

Fields
Field Name Description
type - AuditActorTypeEnum!
user - ObjectID
Example
{
  "type": "ADMIN",
  "user": "5e5677d71bdc2ae76344968c"
}

ChargeCarrierProfile

Description

The carrier money profile in force at bind (RC-09's pin).

Fields
Field Name Description
catalog - ObjectID
source - CarrierProfileSourceEnum!
version - Int
Example
{
  "catalog": "5e5677d71bdc2ae76344968c",
  "source": "CODE",
  "version": 123
}

ChargeEvent

Description

The binding event: when, who, why, and through which operation.

Fields
Field Name Description
actor - ChargeActor!
at - DateTime!
atSource - ChargeEventAtSourceEnum!
id - ObjectID! One per mutation invocation; a retry appends nothing.
operation - ChargeOperationEnum!
type - ChargeEventTypeEnum!
Example
{
  "actor": ChargeActor,
  "at": "2007-12-03T10:15:30Z",
  "atSource": "AUDIT_ENTRY",
  "id": "5e5677d71bdc2ae76344968c",
  "operation": "BACKFILL",
  "type": "BACKFILL"
}

ChargeEventAtSourceEnum

Description

Where the event instant came from: the request (live), or the checkout instant, an audit entry or the creation instant on a backfilled record.

Values
Enum Value Description

AUDIT_ENTRY

CHECKOUT_COMPLETED_AT

CREATED_AT

REQUEST

Example
"AUDIT_ENTRY"

ChargeEventTypeEnum

Description

Why a record was appended: BIND (first pricing), FINALIZE, RE_RATE, COST_OVERRIDE, RATE_PRICING_PATCH, NO_DELIVERY, CANCEL, CORRECTION, BACKFILL.

Values
Enum Value Description

BACKFILL

BIND

CANCEL

CORRECTION

COST_OVERRIDE

FINALIZE

NO_DELIVERY

RATE_PRICING_PATCH

RE_RATE

Example
"BACKFILL"

ChargeFreeShipping

Fields
Field Name Description
codFeeBasis - VatBasis
codFeeCents - Int
codFeeVatRate - Float
configuredCodFeeCents - Int
discountCents - Int
originalCostCents - Int
regionSource - String
ruleId - ObjectID
ruleName - String
thresholdBasis - String
waiveCodFee - Boolean
Example
{
  "codFeeBasis": "EX_VAT",
  "codFeeCents": 123,
  "codFeeVatRate": 123.45,
  "configuredCodFeeCents": 123,
  "discountCents": 987,
  "originalCostCents": 123,
  "regionSource": "abc123",
  "ruleId": "5e5677d71bdc2ae76344968c",
  "ruleName": "xyz789",
  "thresholdBasis": "abc123",
  "waiveCodFee": true
}

ChargeLegEnum

Description

BUYER: what Pircel bound the buyer to pay for delivery. CARRIER: what Pircel expects the carrier to bill.

Values
Enum Value Description

BUYER

CARRIER

Example
"BUYER"

ChargeLegacy

Description

Present on backfilled records alone: the paths the classification read and, when unattributed, why.

Fields
Field Name Description
evidence - [String!]
reason - ChargeLegacyReasonEnum
Example
{
  "evidence": ["abc123"],
  "reason": "COPIED_CUSTOMER_COSTS"
}

ChargeLegacyReasonEnum

Description

Why a backfilled record could not be attributed from stored evidence, or what the evidence lacked.

Values
Enum Value Description

COPIED_CUSTOMER_COSTS

OVERRIDE_AT_CREATE_SUSPECTED

SUMMARY_DIVERGED_NO_TRACE

UNPRICED_RATE_NONZERO_SUMMARY

UNTAGGED_BASIS

VAT_IN_CARRIER_LEG

ZERO_CARRIER_LEG_UNATTRIBUTED

ZERO_RATE_STALE_SUMMARY

Example
"COPIED_CUSTOMER_COSTS"

ChargeLine

Description

One itemised share of the record's amount, on the record's basis. The lines sum to amountCents exactly.

Fields
Field Name Description
allocation - ChargeLineAllocationEnum!
amountCents - Int!
code - String
lineType - ChargeLineTypeEnum!
name - String
netCents - Int Ex-VAT share; null when the basis is unknown.
surchargeType - SurchargeType
taxCents - Int VAT share; null when the basis is unknown; 0 on a carrier record.
Example
{
  "allocation": "DERIVED",
  "amountCents": 123,
  "code": "xyz789",
  "lineType": "ADJUSTMENT",
  "name": "abc123",
  "netCents": 123,
  "surchargeType": "ADDITIONAL_HANDLING",
  "taxCents": 987
}

ChargeLineAllocationEnum

Description

STATED when the producer priced the line itself; DERIVED when it is a split of a total the pipeline computed as one number (the floor and increment residual lands on the delivery line).

Values
Enum Value Description

DERIVED

STATED

Example
"DERIVED"

ChargeLineTypeEnum

Values
Enum Value Description

ADJUSTMENT

COD_FEE

DELIVERY

DISCOUNT

SERVICE

SURCHARGE

Example
"ADJUSTMENT"

ChargeOperationEnum

Values
Enum Value Description

BACKFILL

CANCEL_SHIPMENT

CREATE_SHIPMENT

CREATE_VOUCHER

MODIFY_SHIPMENT_RATE_PRICING

SYNC_STORE_ORDER

UPDATE_SHIPMENT

Example
"BACKFILL"

ChargeOrder

Description

The order context at bind, so the charge is explainable without the shipment’s current state.

Fields
Field Name Description
basis - VatBasis
basisContradiction - Boolean True when the order's basis signal disagreed with the eshop's declared basis at bind; the order's signal won.
basisSource - OrderBasisSourceEnum
billableWeightKg - Float
codFeeUnchargedCents - Int On a buyer RE_RATE after booking: the cash-on-delivery fee of the new quote that this charge does not take, on the record’s basis (net on EX_VAT, gross otherwise). Pircel never raises a booked charge on its own; the store restating its order money is what would. Null on every other record.
destinationCountryCode - String
destinationPostcode - String
optionsCharged - TaxedMoney The requested options' part of this record's amount, as TaxedMoney on the record's basis: set at bind from the selected rate's Costs.optionsCharge and carried forward on a re-rate. Null when the charge priced no requested option.
optionsUnchargedCents - Int On a buyer RE_RATE after a placed shipment's requested options changed: their price in the re-priced quote that this charge does not take, on the record's basis (net on EX_VAT, gross otherwise), as the quote's Costs.optionsCharge less optionsCharged, never below 0. Carried forward by later re-rates; null on every other record. Pircel never raises a booked charge on its own; the buyer pays it only if the order's money (orderAmounts) says so.
parcelCount - Int
paymentMethod - String
storeCodFeeDoubled - Boolean True when the platform charged its own COD fee on top of a shipping total that already covered this price (F-68); informational, nothing was blocked.
Example
{
  "basis": "EX_VAT",
  "basisContradiction": true,
  "basisSource": "ESHOP_DEFAULT",
  "billableWeightKg": 123.45,
  "codFeeUnchargedCents": 987,
  "destinationCountryCode": "xyz789",
  "destinationPostcode": "xyz789",
  "optionsCharged": TaxedMoney,
  "optionsUnchargedCents": 987,
  "parcelCount": 987,
  "paymentMethod": "xyz789",
  "storeCodFeeDoubled": false
}

ChargeOverride

Fields
Field Name Description
requested - ChargeOverrideRequested The admin's raw costOverride input, euros as sent.
Example
{"requested": ChargeOverrideRequested}

ChargeOverrideRequested

Fields
Field Name Description
deliveryCost - Float
productsTotal - Float
totalCost - Float
Example
{"deliveryCost": 123.45, "productsTotal": 987.65, "totalCost": 987.65}

ChargePatch

Description

An admin repricing: components is the itemisation it produced and the next repricing starts from; supplied what the admin sent. The quote on selectedRate is untouched once the ledger is exclusive.

Fields
Field Name Description
components - [PricingComponent!]
supplied - [PricingComponent!]
Example
{
  "components": [PricingComponent],
  "supplied": [PricingComponent]
}

ChargePlatform

Description

The platform's shipping figure at bind and its divergence from ours on a like basis.

Fields
Field Name Description
divergenceCents - Int
pricesIncludeTax - Boolean
shippingTaxCents - Int
shippingTotalCents - Int
Example
{
  "divergenceCents": 123,
  "pricesIncludeTax": true,
  "shippingTaxCents": 987,
  "shippingTotalCents": 123
}

ChargeQuote

Description

The quote the record came from, copied by value at bind: the next fan-out overwrites the quote, the record keeps it.

Fields
Field Name Description
costsDigest - String
deliveryCompany - ObjectID
finalPrice - Float As quoted, euros, verbatim.
fulfillmentType - FulfillmentType
priceProvenance - PriceSourceEnum
quotedAt - DateTime
serviceCode - String
serviceId - ObjectID
serviceName - String
vatBasis - VatBasis
vatRate - Float
Example
{
  "costsDigest": "abc123",
  "deliveryCompany": "5e5677d71bdc2ae76344968c",
  "finalPrice": 123.45,
  "fulfillmentType": "CARRIER",
  "priceProvenance": "ADMIN",
  "quotedAt": "2007-12-03T10:15:30Z",
  "serviceCode": "xyz789",
  "serviceId": "5e5677d71bdc2ae76344968c",
  "serviceName": "abc123",
  "vatBasis": "EX_VAT",
  "vatRate": 987.65
}

ChargeSourceEnum

Description

Where the money came from. Buyer: SERVER_QUOTE, CLIENT_QUOTE, FREE_SHIPPING, COST_OVERRIDE, RATE_PRICING_PATCH, NO_DELIVERY, UNPRICED, CANCELLED (the shipment was cancelled: 0, superseding the charge, which stays readable in supersededCharge), LEGACY_UNATTRIBUTED. Carrier: TARIFF, CARRIER_API, NO_AGREEMENT (a carrier selected after booking that Pircel holds no agreement with: 0 on an UNKNOWN basis, no bill expected), CANCELLED, LEGACY_UNATTRIBUTED.

Values
Enum Value Description

CANCELLED

CLIENT_QUOTE

COST_OVERRIDE

FREE_SHIPPING

LEGACY_UNATTRIBUTED

NO_DELIVERY

RATE_PRICING_PATCH

SERVER_QUOTE

UNPRICED

CARRIER_API

NO_AGREEMENT

TARIFF

Example
"CANCELLED"

ChargeStoreFreeShipping

Description

The store's own free shipping on the buyer record it priced (source SERVER_QUOTE). A Pircel rule's record states freeShipping and source FREE_SHIPPING instead.

Fields
Field Name Description
codFeeWaived - Boolean! Whether the merchant absorbed the rate's cash-on-delivery fee.
label - String The store's name for the grant, as sent.
Example
{"codFeeWaived": true, "label": "xyz789"}

ChargeVat

Fields
Field Name Description
ratePercent - Float
rateSource - ChargeVatRateSourceEnum
taxPointDate - DateTime
Example
{
  "ratePercent": 987.65,
  "rateSource": "CARRIER_RESPONSE",
  "taxPointDate": "2007-12-03T10:15:30Z"
}

ChargeVatRateSourceEnum

Description

Where a charge's VAT rate came from. SERVER: stated by Pircel's pricing on a quote that recorded no trace, so whether the tariff or the carrier gave it is not known. CLIENT: stated by the client with its price.

Values
Enum Value Description

CARRIER_RESPONSE

CLIENT

LAW

LEGACY_MAP

NONE

SERVER

TARIFF_GROUP

Example
"CARRIER_RESPONSE"

CheckoutDefaultSelectionEnum

Values
Enum Value Description

AUTO

Pre-select the pinned default carrier, or the first rate by sort order when none is pinned

NONE

No server-side pre-selection; the buyer chooses a rate
Example
"AUTO"

CodCollectible

Description

What the courier would be told to collect if the label were minted now, and how that was determined. Resolved server-side through the single accessor every carrier adapter uses — do not re-implement the fallback ladder client-side. On a shipment whose label already exists this is a LIVE figure and can differ from the printed one: read codDeclaration for what the courier will actually ask for.

Fields
Field Name Description
amount - Float The amount to collect. Set only when status is RESOLVED; null otherwise. A null here is never a zero.
source - CodCollectibleSourceEnum Which figure answered. Null when nothing was resolved. DERIVED_COST_SUMMARY means the figure is an estimate, not the platform's own number.
status - CodCollectibleStatusEnum! Distinguishes "not COD", "COD but nothing to collect" and "we could not tell" — all three of which would otherwise render as 0.
Example
{"amount": 987.65, "source": "AMOUNT_DUE", "status": "NOT_COD"}

CodCollectibleSourceEnum

Description

Which figure the collectible was taken from.

Values
Enum Value Description

AMOUNT_DUE

orderAmounts.amountDue — what the platform says remains to be paid.

DERIVED_COST_SUMMARY

Pircel's own costSummary estimate, used only when the shipment carries no platform totals at all (pre-contract and CSV-imported orders). Discount-blind — treat as an estimate.

GRAND_TOTAL

orderAmounts.grandTotal — the platform total, used when no amountDue was sent. On a partly-prepaid order this over-states what is actually owed.
Example
"AMOUNT_DUE"

CodCollectibleStatusEnum

Description

Whether a COD collectible could be resolved, and to what.

Values
Enum Value Description

NOT_COD

The order is not cash-on-delivery; nothing is collected.

NO_COLLECTION

A COD order the platform states is already fully paid (a verbatim amountDue of 0). The voucher takes the non-COD path.

RESOLVED

An amount was resolved; amount and source are set.

UNRESOLVABLE

A COD order carrying no usable total. Voucher creation fails closed rather than shipping a label that collects nothing — do NOT render this as 0.
Example
"NOT_COD"

CodDeclaration

Description

What the carrier was told to collect, frozen when the label was minted. Stored, never recomputed: this is the number the courier will ask for even if the order has changed since. Absent on shipments with no live label, and on shipments vouchered before declarations were recorded — in both cases fall back to codCollectible.

Fields
Field Name Description
amount - Float! The COD amount printed on the label.
currency - String Currency the amount was declared in. Null when it came from the legacy costSummary rung, which predates any stated currency.
declaredAt - DateTime! When the label carrying this amount was minted.
source - CodCollectibleSourceEnum! Which figure the printed amount came from. DERIVED_COST_SUMMARY on a discounted order means the label was priced before discounts.
voucherCodes - [String!] The voucher codes issued alongside this declaration.
Example
{
  "amount": 123.45,
  "currency": "abc123",
  "declaredAt": "2007-12-03T10:15:30Z",
  "source": "AMOUNT_DUE",
  "voucherCodes": ["xyz789"]
}

ColorScheme

Fields
Field Name Description
accent - String
background - String
primary - String
secondary - String
Example
{
  "accent": "abc123",
  "background": "abc123",
  "primary": "xyz789",
  "secondary": "xyz789"
}

ConnectionStatus

Values
Enum Value Description

ACTIVE

Store connection is active and working

DISCONNECTED

The store or a merchant disconnected it. Terminal like RETIRED: its credentials and hint secret are gone and its key no longer works, but it stays listed, and on the shipments that record it, so a reconnect or a data request still finds the store. A reconnect is a new connection.

ERROR

Store connection has an error

RETIRED

A new installation of the same store replaced this connection. Terminal: it stays listed, and on the shipments that record it, but is never used, refreshed or stated again.

REVOKED

Store connection has been revoked
Example
"ACTIVE"

Contact

Fields
Field Name Description
companyName - String Company name.
email - String Email address.
firstname - String First name.
lastname - String Last name.
phone - String Phone number.
Example
{
  "companyName": "abc123",
  "email": "xyz789",
  "firstname": "xyz789",
  "lastname": "abc123",
  "phone": "xyz789"
}

ContactInput

Description

Free text is trimmed and the email lower-cased. On a shipment update, an absent field keeps the stored value and null or blank clears it; an empty object changes nothing. A placed shipment names its recipient (first and last name, or company), else shipmentInput.required.

Fields
Input Field Description
companyName - String Company name. Either company name OR first and last name is required.
email - String Email address.
firstname - String First name. Either first and last name OR company name is required.
lastname - String Last name. Either first and last name OR company name is required.
phone - String Phone number.
Example
{
  "companyName": "abc123",
  "email": "abc123",
  "firstname": "abc123",
  "lastname": "abc123",
  "phone": "xyz789"
}

CookieConsentAction

Description

How a visitor gave their cookie choice.

Values
Enum Value Description

ACCEPT_ALL

REJECT_ALL

SAVE_CHOICES

Their own selection, saved.
Example
"ACCEPT_ALL"

CookieConsentRecordInput

Fields
Input Field Description
action - CookieConsentAction!
analytics - Boolean! Whether analytics were allowed.
consentId - ID! The random UUID v4 the browser made at the visitor's first choice and keeps in its consent cookie.
policyVersion - String! The cookie policy version the choice was made under, YYYY-MM-DD.
Example
{
  "action": "ACCEPT_ALL",
  "analytics": true,
  "consentId": 4,
  "policyVersion": "abc123"
}

CookieConsentRecordPayload

Fields
Field Name Description
recordedAt - DateTime! When Pircel's server recorded the choice.
Example
{"recordedAt": "2007-12-03T10:15:30Z"}

Coordinates

Fields
Field Name Description
latitude - Float Geographical latitude coordinate in decimal degrees (-90 to 90)
longitude - Float Geographical longitude coordinate in decimal degrees (-180 to 180)
Example
{"latitude": 123.45, "longitude": 987.65}

CostSummary

Description

Pircel's OWN view of the order: catalog product prices plus the delivery rate Pircel quoted. It is NOT the buyer's money and it is not the platform's total — it knows nothing about coupons, store fees, gift cards, or what the storefront actually charged for shipping (those live on orderAmounts). Frozen once checkout completes, so on an order edited afterwards it can disagree with products. For what the courier collects, read Shipment.codCollectible.

Fields
Field Name Description
deliveryCostCents - Int What Pircel charged for delivery, in integer cents: the quoted rate including surcharges, taxes and the eshop multiplier. The storefront may have charged the buyer something else — that is orderAmounts.shippingTotal.
productsTotalCents - Int Sum of catalog line prices (price × quantity) as sent, in integer cents. PRE-discount: per-line lineDiscount/lineTotal and order-level discountTotal are not subtracted here.
totalCostCents - Int productsTotalCents + deliveryCostCents, on the basis the eshop prices in. Not the order total the buyer paid — no discount, fee or tender is applied.
deliveryAmount - TaxedMoney deliveryCostCents as TaxedMoney, stated on the order’s basis (vatDetails.valueAddedTaxIncluded), with its net, tax and gross derived server-side at vatRate. Replaces grossing deliveryCostCents by vatRate in the client. With no rate, the stated figure is its own leg alone (grossCents on an inclusive order, netCents on a net one). Only statedCents when the order states no basis, or when a charged delivery leg is one the summary carries unconverted because its basis is unknown: the selected rate’s own price on an unknown basis, a bound charge that states none, or a free-shipping fee whose snapshot records no basis. A fee that records one is on the order’s basis. The delivery charge as the ledger bound it, at its own rate, is Shipment.charge.buyer.
productsAmount - TaxedMoney productsTotalCents as TaxedMoney, stated on the order’s basis (vatDetails.valueAddedTaxIncluded), with its net, tax and gross derived server-side at vatRate. Replaces grossing productsTotalCents by vatRate in the client. With no rate, the stated figure is its own leg alone (grossCents on an inclusive order, netCents on a net one). Only statedCents when the order states no basis. The order’s one rate over all the products, not any line’s own.
totalAmount - TaxedMoney totalCostCents as TaxedMoney, stated on the order’s basis (vatDetails.valueAddedTaxIncluded), with its net, tax and gross derived server-side at vatRate. Replaces grossing totalCostCents by vatRate in the client. With no rate, the stated figure is its own leg alone (grossCents on an inclusive order, netCents on a net one). Only statedCents when the order states no basis, or when its delivery leg is on an unknown basis (see deliveryAmount). Derived once from the stored total, so its gross can differ by a cent from the sum of the two legs’ grosses. For what the courier collects, read Shipment.codCollectible.
vatRate - Float The VAT rate (percent) that applies to the order. On a net-priced order it is the rate totalAmount grosses totalCostCents at. Under the law it is recorded on every order, VAT-inclusive ones included (where no uplift is applied); under legacy an inclusive order records none. Its presence does not say the order is net-priced — read vatDetails.valueAddedTaxIncluded. It is ONE rate for the whole order, resolved from the place of supply (the buyer, or the store for a collection) — not the rate of any individual line, and not the rate of the delivery leg, whose own basis is selectedRate.costs.vatBasis.
Example
{
  "deliveryCostCents": 123,
  "productsTotalCents": 987,
  "totalCostCents": 123,
  "deliveryAmount": TaxedMoney,
  "productsAmount": TaxedMoney,
  "totalAmount": TaxedMoney,
  "vatRate": 987.65
}

Costs

Description

Cost breakdown for a service, in integer cents. finalPriceCents is the charge on its vatBasis, except under an applied storeFreeShipping, where it stays the rate as quoted and charge is what the buyer pays; and the basis VARIES BETWEEN RATES IN ONE RESPONSE. Read the money from charge, deliveryCharge and codFee (TaxedMoney): the server states the net, tax and gross of each, so no client derives them. A rate whose basis is UNKNOWN publishes only charge.statedCents: its net is not derivable, and a platform that must post a net drops the rate rather than guess.

Every other figure here is a partial, producer-dependent itemisation drawn from a different stage of the pipeline — carrier truth, Pircel’s pre-multiplier net tariff, or the final gross — and which stage a field belongs to depends on which producer built the rate, which this object does not say. No combination of them reconstructs finalPriceCents: the multiplier, the minimum-price floor and the rounding increment land after the itemised legs and appear in none of them. Read a field for what it is; never reconcile a sum against the charge.

Fields
Field Name Description
basePriceCents - Int Net, pre-multiplier, and producer-dependent: the carrier tariff base on a tariff rate, the carrier’s own base on FedEx. Not a share of finalPriceCents.
codSurchargeCents - Int The cash-on-delivery fee, ALWAYS STATED NET — even when vatBasis says every other amount here is gross. It is the one exception to this object's single-basis rule. ⚠️ WHOSE fee it is depends on which object you are reading, because this type is used for two different things: on selectedRate.costs it is the BUYER's fee before the merchant's markup; on selectedRate.negotiatedCosts it is what the CARRIER bills the MERCHANT, and has nothing to do with what the buyer pays. Never add the two, and never add either to freeShipping.codFeeCharged. ⚠️ It is inside surchargesTotalCents, never beside it: adding the two double-counts the fee. ⚠️ There is NO formula that recovers the buyer's fee from it: read codFee. Zero or absent when the rate was not quoted for cash on delivery.
finalPriceCents - Int Final price after all fees, surcharges and taxes with multiplier and minimum price constraints applied, on vatBasis. Under an applied storeFreeShipping it stays the rate as quoted; the buyer pays charge.
surchargesTotalCents - Int Net, pre-multiplier: every surcharge line of the rate, the COD fee included. codSurchargeCents is inside it, never beside it: adding the two double-counts the COD fee.
taxesAndDutiesTotalCents - Int The CARRIER's own itemised tax and duty at quote time. Structurally 0 on every tariff carrier and on UPS, so a 0 here is not evidence that no tax applies. NOT disjoint from vatAmountCents: on FedEx, the only producer that states a real figure, the VAT inside this IS that field — summing the two counts the same money twice.
totalPriceBeforeMultiplierCents - Int Subtotal before the multiplier, VAT, floor and rounding are applied. On vatBasis-tagged rates this is the EX-VAT subtotal; rates built before the net pipeline may include VAT here.
vatAmountCents - Int VAT contained in finalPriceCents (when vatBasis is inc-vat) — derived from the final, multiplier-scaled gross on net-pipeline rates. 0 on ex-vat rates. On a rate Pircel priced, a stated 0 is an answer, not an absence. Read charge.taxCents rather than this.
charge - TaxedMoney The charge as TaxedMoney: finalPriceCents on its own basis, with its net, tax and gross. On a bound selectedRate it is the bound charge whole (Shipment.charge.buyer): its amount on its basis at its rate, so statedCents can differ from finalPriceCents. Under an applied storeFreeShipping it is the grant-priced charge. Null only when the rate carries no price.
codFee - TaxedMoney The cash-on-delivery part of the charge as TaxedMoney, on the same basis as charge, so deliveryCharge and codFee sum to charge exactly. It is the fee as priced, never floored or rounded: the minimum price and the rounding increment land on deliveryCharge, so neither leg is the COD price minus the card price. 0 when the charge carries no COD fee (on selectedRate.costs of a booked shipment, the bound charge: a COD state reached after booking is not charged, see ChargeOrder.codFeeUnchargedCents), null when the legs are not derivable.
currencyCode - CurrencyCode! ISO 4217 currency of every amount on this object. Always EUR, and not a default that can be overridden: tariffs are constructed in euros and the API carriers reject a non-EUR rate rather than converting it. Stated explicitly so an integration whose store is based in another currency can detect the mismatch and refuse, rather than rendering a euro figure under its own symbol.
deliveryCharge - TaxedMoney The delivery part of the charge as TaxedMoney, on the same basis as charge; null when the legs are not derivable. It absorbs the minimum-price floor and the rounding increment, which belong to no line, so it can exceed the delivery share a client would compute. ⚠️ Under free shipping the buyer pays freeShipping.codFeeCharged, not these legs.
optionsCharge - TaxedMoney The requested options' part of charge, as the rate prices them before any free shipping: each option's lines at the rate's multiplier, with their share of the charge's own tax, on charge's basis. Inside deliveryCharge, never beside it. Informational: on a booked shipment the buyer was charged ChargeOrder.optionsCharged. Null when the rate prices no requested option, and on negotiatedCosts.
priceMultiplier - Float Multiplier applied to the price
storeFreeShipping - RateStoreFreeShipping The store's own free shipping on this rate: null when the shipment has no grant, applied: false when a Pircel free-shipping rule took precedence, applied: true when the grant priced it. Post-grant, here and on SelectedRate.costs: charge, deliveryCharge and codFee; delivery is 0 and charge equals codFee, which is 0 unless Eshop.storeFreeShippingCodFee is CHARGE. As quoted, as under a Pircel rule: finalPriceCents, vatAmountCents, codSurchargeCents, basePriceCents, surchargesTotalCents, totalPriceBeforeMultiplierCents, priceComponents and pricingTrace. Always null on negotiatedCosts.
vatBasis - VatBasis Whether finalPriceCents contains VAT. The answer VARIES WITHIN ONE RESPONSE, by the producer that built the rate: the tariff engine states the order’s basis, and an API carrier states what its response proves — UNKNOWN when it proves nothing (a UPS response without its tax block). Absent on rates built before the taxation module. Do not read absent or UNKNOWN as EX_VAT: an amount whose basis is unstated is not comparable with one whose basis is stated. ⚠️ It governs finalPriceCents and the totals beside it, NOT every field on this object: codSurchargeCents is stated net regardless of what this says.
vatRate - Float VAT rate (percent) applied to this quote at build time; vatBasis says whether finalPriceCents contains it. Absent when the rate source exposed no rate, and never a substitute for vatBasis. Read the rate as charge.ratePercent and the net as charge.netCents; never derive either from finalPriceCents and this rate.
Example
{
  "basePriceCents": 123,
  "codSurchargeCents": 987,
  "finalPriceCents": 123,
  "surchargesTotalCents": 987,
  "taxesAndDutiesTotalCents": 987,
  "totalPriceBeforeMultiplierCents": 123,
  "vatAmountCents": 987,
  "charge": TaxedMoney,
  "codFee": TaxedMoney,
  "currencyCode": "EUR",
  "deliveryCharge": TaxedMoney,
  "optionsCharge": TaxedMoney,
  "priceMultiplier": 123.45,
  "storeFreeShipping": RateStoreFreeShipping,
  "vatBasis": "EX_VAT",
  "vatRate": 987.65
}

CostsInput

Description

Input for cost breakdown. Every amount is a stated amount: 0 to 1,000,000 with at most 2 decimals, else shipmentInput.invalidNumber; priceMultiplier is a factor and may not be negative.

Fields
Input Field Description
basePrice - Float Base price before any surcharges, fees, or taxes
codSurcharge - Float The cash-on-delivery fee you are echoing back, NET — the basis the server quoted it on, whatever vatBasis says about finalPrice. Send it as it was quoted rather than converting it to match the price beside it: a grossed-up value here reads as a larger fee than the one the buyer was shown.
finalPrice - Float Final price after all fees, surcharges and taxes with multiplier and minimum price constraints applied
priceMultiplier - Float Multiplier applied to the price
surchargesTotal - Float Total of all surcharges
taxesAndDutiesTotal - Float Stored verbatim. Do not restate VAT you have already put in vatAmount — the two are not summed, and a reader that took the larger of them would silently drop the smaller.
totalPriceBeforeMultiplier - Float Subtotal before the multiplier, VAT, floor and rounding are applied. On vatBasis-tagged rates this is the EX-VAT subtotal; rates built before the net pipeline may include VAT here.
vatAmount - Float VAT contained in finalPrice (when vatBasis is inc-vat) — derived from the final, multiplier-scaled gross on net-pipeline rates. 0 on ex-vat rates.
vatBasis - VatBasis Whether the finalPrice you are sending contains VAT. Optional so the plugins already in the field keep working (BE-14), but send it: an untagged price is carried as stated with its VAT position unknown — it joins the order total unconverted and binds a charge with no net.
Example
{
  "basePrice": 987.65,
  "codSurcharge": 123.45,
  "finalPrice": 987.65,
  "priceMultiplier": 987.65,
  "surchargesTotal": 123.45,
  "taxesAndDutiesTotal": 123.45,
  "totalPriceBeforeMultiplier": 123.45,
  "vatAmount": 987.65,
  "vatBasis": "EX_VAT"
}

CreatePickupListReturn

Fields
Field Name Description
lists - [PickupListsList]
Example
{"lists": [PickupListsList]}

CreateVoucherPayload

Description

Result of createVoucher. Wraps the updated shipment plus the flat list of voucher codes the carrier issued. Future revisions may add structured warnings (e.g. for a failed customer email notification) without breaking clients.

Fields
Field Name Description
createdCodes - [String!]! Voucher codes the carrier issued in this invocation, in stable order (shipment-level first, then per-parcel) and de-duped (UPS emits the master tracking number as both the shipment-level voucher and the first parcel's code). Empty on the idempotent 'already-created' short-circuit, so createdCodes.length === 0 distinguishes a fresh creation from a no-op.
shipment - Shipment! The shipment with its voucher state freshly populated. Read shipmentVoucher, parcels[i].voucher, unassociatedVouchers, and otherDocuments for the carrier-issued data.
Example
{
  "createdCodes": ["xyz789"],
  "shipment": Shipment
}

CredentialField

Fields
Field Name Description
isRequired - Boolean!
isSecret - Boolean
key - String!
label - String!
type - CredentialFieldTypeEnum!
Example
{
  "isRequired": true,
  "isSecret": true,
  "key": "xyz789",
  "label": "abc123",
  "type": "ACCOUNT"
}

CredentialFieldTypeEnum

Values
Enum Value Description

ACCOUNT

CREDENTIALS

Example
"ACCOUNT"

CredentialTransport

Values
Enum Value Description

HEADER

Credentials are sent in the HTTP Authorization header.

QUERY

Credentials are sent as query-string parameters, for stores whose web server does not pass the Authorization header through to the platform.
Example
"HEADER"

CurrencyCode

Description

ISO 4217 three-letter currency code.

Values
Enum Value Description

EUR

Example
"EUR"

CustomizationExtensions

Description

Extension point for future customization features

Fields
Field Name Description
_placeholder - Boolean Placeholder field for future extensions
Example
{"_placeholder": false}

Date

Description

A date string, such as 2007-12-03, compliant with the full-date format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.

Example
"2007-12-03"

DateTime

Description

A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the date-time format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.

Example
"2007-12-03T10:15:30Z"

DeliveryCompany

Fields
Field Name Description
_id - ID!
acceptedPaymentMethods - [ShipmentPaymentMethodEnum!]! Payment methods this carrier can offer the end customer. Cash-on-delivery is carrier-dependent; card/PayPal/bank-deposit are merchant-gateway methods and may be listed for completeness.
capabilities - DeliveryCompanyCapabilities Per-carrier behavior matrix: multi-piece support, cancellation cascade mode, per-piece tracking, where customer references are accepted.
createdAt - DateTime!
credentialFields - [CredentialField!]!
defaultConfig - DeliveryCompanyDefaultConfig!
description - String
hasAction - Boolean!
Arguments
hasApiIntegration - Boolean!
internalOnly - Boolean!
isEnabled - Boolean!
isVisibleAtCheckout - Boolean!
logo - Logo
minimumWeight - Float!
name - String!
pickupTimeOptions - PickupTimeOptions!
services - [DeliveryCompanyService!]! All services the carrier offers. Each entry includes the carrier-prescribed code and its human-readable display name.
slug - String!
supportedActions - [DeliveryCompanyApiActionEnum!]!
supportsFuelSurcharge - Boolean! Whether an eshop can set a fuel surcharge on this carrier: true when Pircel prices it from a tariff, false when the carrier's own rating API does (its quote already includes its fuel surcharge).
tags - [String!]!
trackingUrlInformation - TrackingUrlInformation
updatedAt - DateTime!
usesAccountShipperAddress - Boolean!
Example
{
  "_id": "4",
  "acceptedPaymentMethods": ["AFTERPAY_CLEARPAY"],
  "capabilities": DeliveryCompanyCapabilities,
  "createdAt": "2007-12-03T10:15:30Z",
  "credentialFields": [CredentialField],
  "defaultConfig": DeliveryCompanyDefaultConfig,
  "description": "xyz789",
  "hasAction": true,
  "hasApiIntegration": true,
  "internalOnly": false,
  "isEnabled": false,
  "isVisibleAtCheckout": false,
  "logo": Logo,
  "minimumWeight": 987.65,
  "name": "abc123",
  "pickupTimeOptions": PickupTimeOptions,
  "services": [DeliveryCompanyService],
  "slug": "abc123",
  "supportedActions": ["CANCEL_VOUCHER"],
  "supportsFuelSurcharge": false,
  "tags": ["xyz789"],
  "trackingUrlInformation": TrackingUrlInformation,
  "updatedAt": "2007-12-03T10:15:30Z",
  "usesAccountShipperAddress": true
}

DeliveryCompanyApiActionEnum

Values
Enum Value Description

CANCEL_VOUCHER

CREATE_PICKUP_LIST

CREATE_VOUCHER

GET_RATE

UPLOAD_DOCUMENT

Example
"CANCEL_VOUCHER"

DeliveryCompanyCapabilities

Description

Per-carrier capability matrix that downstream code branches on for cancellation cascade, multi-piece UI gating, reference-stamping, and parcel-identity round-tripping.

Fields
Field Name Description
cancellation - CancellationCapability!
multiPiece - MultiPieceCapability!
parcelIdentityMode - ParcelIdentityModeEnum! How a returned voucher round-trips back to the originating parcel. Drives webhook / callback handler behaviour: 'piece-id' uses parcelVoucher.deliveryCompanyPieceId, 'positional' uses the parcel index, 'none' means no per-piece identity exists.
perPieceTracking - Boolean! Whether the carrier returns a distinct tracking number per parcel.
referenceScope - VoucherCapabilityScopeEnum! Where the carrier accepts the customer reference fields we send.
Example
{
  "cancellation": CancellationCapability,
  "multiPiece": MultiPieceCapability,
  "parcelIdentityMode": "NONE",
  "perPieceTracking": true,
  "referenceScope": "BOTH"
}

DeliveryCompanyCredentialState

Description

One credential the carrier declares. A secret's value is never readable; a field the carrier flags isSecret: false (an account identifier) reads back.

Fields
Field Name Description
isSet - Boolean! Whether a value is stored.
key - String!
updatedAt - DateTime When it was last set or cleared through updateDeliveryCompanyCredentials. Null when never set, or stored before that mutation existed.
value - String The stored value, only for a field the carrier flags isSecret: false; null for a secret, an unflagged field, or one that is not set.
Example
{
  "isSet": false,
  "key": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z",
  "value": "xyz789"
}

DeliveryCompanyDefaultConfig

Fields
Field Name Description
displayAtCheckout - Boolean!
minimumPrice - Float!
priceMultiplier - Float!
roundingIncrement - Float!
Example
{
  "displayAtCheckout": true,
  "minimumPrice": 987.65,
  "priceMultiplier": 987.65,
  "roundingIncrement": 987.65
}

DeliveryCompanyIDOrSlugInput

Fields
Input Field Description
_id - ID
slug - String
Example
{"_id": 4, "slug": "abc123"}

DeliveryCompanyService

Description

A carrier-prescribed service: the carrier's internal code and its human-readable display name.

Fields
Field Name Description
code - String! Carrier-specific service identifier (e.g. "FEDEX_GROUND", "65"). This is the value to use when calling the carrier API or when configuring an eshop's enabled services.
name - String! Human-readable display name for the service (e.g. "FedEx Ground", "UPS Worldwide Saver"). Falls back to code if the service is not in our catalog.
Example
{
  "code": "abc123",
  "name": "abc123"
}

DeliveryRate

Description

Available rates for a delivery company with all available service options

Fields
Field Name Description
deliveryCompany - DeliveryCompany Delivery company providing this rate
error - String Why this carrier produced no rate. Two kinds of answer share this field. deliveryCompany.disabled, deliveryCompany.doesNotSupportRateFetching, deliveryCompany.notAvailableForShipmentConfiguration, carrierProfile.notPublished (the carrier has no published service catalogue) and rate.optionsRefused (with its refusals) are PRE-FILTERS: the carrier was never asked, so they say nothing about whether it could have priced this destination. Anything else is the pricing engine's or the carrier's own answer to a real request, except two that say nothing about the destination either: deliveryCompany.timeout, the carrier was asked but did not answer in time (15 s, or 3 s on a checkout quote not yet placed, with no order), and deliveryCompany.unreachable, the carrier could not be reached or answered with a server error, or is failing and is not being asked for now. The checks are first-match-wins, so a pre-filter reason masks whatever the carrier would have said.
quotedAt - DateTime When this carrier quote was fetched. Absent on fan-outs persisted before the stamp existed.
rating - Float Rating of the delivery company
refusals - [RateRefusal!] Why the request's options ruled out this carrier or some of its products; absent when nothing was refused.
services - [Service] Available services from this carrier
Example
{
  "deliveryCompany": DeliveryCompany,
  "error": "abc123",
  "quotedAt": "2007-12-03T10:15:30Z",
  "rating": 123.45,
  "refusals": [RateRefusal],
  "services": [Service]
}

DistanceSalesTaxationEnum

Description

Where the eshop's intra-EU distance sales of goods are taxed, as its accountant attests (VAT Directive Art 33(a), Art 59c). One-Stop Shop registration does not choose this; it is a filing scheme.

Values
Enum Value Description

DESTINATION

At the buyer's member state's rate: above the EUR 10 000 threshold, or by the seller's election.

ORIGIN

At the establishment's rate: for a seller whose intra-EU distance sales stay at or below EUR 10 000 in the current and the preceding calendar year.
Example
"DESTINATION"

DocumentUploadEligibility

Description

Whether a shipment can take a document upload, and why not when it cannot.

Fields
Field Name Description
available - Boolean! Whether the upload endpoint would accept a document.
reason - String Null when available. Otherwise the very error code POST /shipments/:shipmentId/documents would answer with for this shipment, so a client renders one message whether the control was hidden or the request refused.
Example
{"available": false, "reason": "xyz789"}

Eshop

Fields
Field Name Description
_id - ObjectID
address - String
addressBook - [AddressBookEntryType]
bookingsBlockedByPolicy - Boolean! Whether a policy version this eshop deferred is past its deadline unaccepted: new shipments and labels are then refused with policy.acceptanceRequired.
brandAssets - BrandAssets
city - String
deliveryCompanies - [EshopDeliveryCompany]
Arguments
deliveryCompany - DeliveryCompanyIDOrSlugInput
enabledOnly - Boolean
freeShipping - FreeShippingConfig Free shipping promotion configuration
general - GeneralConfig General eshop settings
merchantNotices - [MerchantNoticeRecord!]! When each version of a text Pircel supplies to merchants was shown, copied, dismissed and emailed to this eshop, newest version first. Empty for a key or a service.
name - String
packageInsurance - Float
pageCustomization - PageCustomization
phone - String
policyAcceptances - [PolicyAcceptance!]! The policy versions this eshop's users accepted, newest first; the record of which version binds the account. Empty for a key or a service.
postcode - String
pricingEtag - String Changes whenever anything Pircel holds that decides this eshop's quoted prices or offered rates changes: its carrier settings, free shipping, tax profile and addresses, the carriers' records, the tariffs and VAT rates in force, and the pricing code and configuration of the running release. It does not change when a live-rated carrier (FedEx, UPS) changes its own prices. An opaque entity tag (RFC 9110): compare for equality only; never parse or order it. A cached quote whose Shipment.pricingEtag differs from it is stale. Null when it cannot be computed now.
retentionHold - RetentionHold An admin's hold on the eshop's records against retention's deletions; admin only, null for anyone else.
securityValue - Float
slug - String
storeConnections - [StoreConnection]
storeFreeShippingCodFee - StoreFreeShippingCodFee! Who pays the cash-on-delivery fee when a rate request states storeFreeShipping.granted and no Pircel free-shipping rule applies; a Pircel rule that applies wins. WAIVE by default. Set it with updateEshopSettings under freeShipping.
taxProfile - TaxProfile How VAT is resolved for the charges Pircel prices, and the accountant-confirmed facts law mode needs. READ-ONLY, deliberately — see the type description.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "address": "abc123",
  "addressBook": [AddressBookEntryType],
  "bookingsBlockedByPolicy": true,
  "brandAssets": BrandAssets,
  "city": "abc123",
  "deliveryCompanies": [EshopDeliveryCompany],
  "freeShipping": FreeShippingConfig,
  "general": GeneralConfig,
  "merchantNotices": [MerchantNoticeRecord],
  "name": "xyz789",
  "packageInsurance": 987.65,
  "pageCustomization": PageCustomization,
  "phone": "abc123",
  "policyAcceptances": [PolicyAcceptance],
  "postcode": "xyz789",
  "pricingEtag": "xyz789",
  "retentionHold": RetentionHold,
  "securityValue": 123.45,
  "slug": "abc123",
  "storeConnections": [StoreConnection],
  "storeFreeShippingCodFee": "CHARGE",
  "taxProfile": TaxProfile
}

EshopAuthConfig

Fields
Field Name Description
addressBookEntry - ObjectID Reference to an address book entry from the Eshop address book.
credentials - [DeliveryCompanyCredentialState!]! One state per credential the carrier declares. Secrets are write-only: save them through updateDeliveryCompanyCredentials.
Example
{
  "addressBookEntry": "5e5677d71bdc2ae76344968c",
  "credentials": [DeliveryCompanyCredentialState]
}

EshopBranding

Description

Public branding information for an eshop to render branded pages

Fields
Field Name Description
_id - ObjectID! Eshop identifier
colorScheme - BrandColorScheme Color scheme for UI theming
customization - CustomizationExtensions Extension point for future customization features
logos - BrandLogos Brand logos for different usage contexts
name - String! Eshop display name
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "colorScheme": BrandColorScheme,
  "customization": CustomizationExtensions,
  "logos": BrandLogos,
  "name": "abc123"
}

EshopDeliveryCompany

Fields
Field Name Description
bookingRefusal - String The code every quote and booking with this carrier is refused with, or null when it is usable. deliveryCompany.ownCredentialsRequired: in production the carrier needs the eshop’s own account credentials.
config - EshopDeliveryCompanyConfig
deliveryCompany - DeliveryCompany
isEnabled - Boolean
requestableOptions - [RequestableOption!] The options a storefront may offer for this carrier, computed from the carrier's catalogue and the eshop's effective tariff; empty while optionsEnabled is off. Nothing is stored per eshop, so a toggle loses nothing.
Example
{
  "bookingRefusal": "xyz789",
  "config": EshopDeliveryCompanyConfig,
  "deliveryCompany": DeliveryCompany,
  "isEnabled": false,
  "requestableOptions": [RequestableOption]
}

EshopDeliveryCompanyConfig

Fields
Field Name Description
authConfigs - [EshopAuthConfig]
displayAtCheckout - Boolean
enabledServices - [String]
fuelSurchargePercent - Float Fuel surcharge in percent added to this carrier's quotes; null when never set. Null and 0 both mean off.
minimumPrice - Float
notificationPreferences - NotificationPreferences
optionsEnabled - Boolean Whether this eshop offers the carrier's catalogue options to buyers; a storefront shows options only where it is on.
paperType - String
priceMultiplier - Float
roundingIncrement - Float
rules - [Rule]
Example
{
  "authConfigs": [EshopAuthConfig],
  "displayAtCheckout": false,
  "enabledServices": ["abc123"],
  "fuelSurchargePercent": 987.65,
  "minimumPrice": 987.65,
  "notificationPreferences": NotificationPreferences,
  "optionsEnabled": true,
  "paperType": "xyz789",
  "priceMultiplier": 123.45,
  "roundingIncrement": 123.45,
  "rules": [Rule]
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

FreeShippingCartValueSourceEnum

Description

Which figures the free-shipping cart value was taken from.

Values
Enum Value Description

LINE_SUBTOTALS

The shipped lines' stated lineSubtotal.

LINE_TOTALS

The shipped lines' stated lineTotal.

ORDER_TOTALS

The order's itemsSubtotal less its discountTotal.

PRICE_TIMES_QUANTITY

The shipped lines' price × quantity.
Example
"LINE_SUBTOTALS"

FreeShippingCheckoutDisplayEnum

Values
Enum Value Description

ALL_CARRIERS

Show all carrier rates with discounted/free prices at checkout

SINGLE_OPTION

Show a single "Free Shipping" option using the default carrier at checkout
Example
"ALL_CARRIERS"

FreeShippingConfig

Description

Free shipping promotion configuration for an eshop

Fields
Field Name Description
checkoutDisplay - FreeShippingCheckoutDisplayEnum How free shipping appears at checkout. Defaults to ALL_CARRIERS.
isEnabled - Boolean Whether free shipping promotion is active for this eshop
restOfWorld - FreeShippingRestOfWorld Optional fallback applied when no rule matches the destination country
revision - Int! Incremented by every save of this configuration. Send it back as expectedRevision with a change to rules or restOfWorld.
rules - [FreeShippingRule!] Ordered list of region rules; first match by destination country wins
Example
{
  "checkoutDisplay": "ALL_CARRIERS",
  "isEnabled": true,
  "restOfWorld": FreeShippingRestOfWorld,
  "revision": 987,
  "rules": [FreeShippingRule]
}

FreeShippingDecision

Description

Pircel's free-shipping decision as last settled, applied or not. It is frozen once the buyer charge binds, and null on shipments settled before this field existed.

Fields
Field Name Description
applied - Boolean!
cartValueCents - Int Null when the basis could not be computed.
cartValueSource - FreeShippingCartValueSourceEnum
codFeeChargedCents - Int The COD fee the buyer pays under the applied rule, on the order’s basis.
decidedAt - DateTime!
frozen - Boolean! True once the buyer charge bound.
outcome - FreeShippingDecisionOutcomeEnum!
regionSource - AppliedRegionSourceEnum
ruleId - ObjectID Null when no rule matched.
ruleName - String
thresholdBasis - FreeShippingThresholdBasisEnum
thresholdCents - Int
Example
{
  "applied": true,
  "cartValueCents": 123,
  "cartValueSource": "LINE_SUBTOTALS",
  "codFeeChargedCents": 123,
  "decidedAt": "2007-12-03T10:15:30Z",
  "frozen": false,
  "outcome": "APPLIED",
  "regionSource": "REST_OF_WORLD",
  "ruleId": "5e5677d71bdc2ae76344968c",
  "ruleName": "abc123",
  "thresholdBasis": "CATALOG",
  "thresholdCents": 123
}

FreeShippingDecisionOutcomeEnum

Description

Why Pircel's free-shipping rule did or did not apply.

Values
Enum Value Description

APPLIED

The rule applied.

BELOW_MIN_ITEM_COUNT

The cart reached the threshold with fewer items than the rule requires.

BELOW_THRESHOLD

The cart value was below the rule’s threshold.

CART_VALUE_UNKNOWN

A figure the cart value is computed from is not a usable amount: not a number, or more decimals than allowed (2 on a stated amount, 6 on a unit price). No promotion applies.

NON_CARRIER_FULFILLMENT

The selection is a pickup or an external courier, which a carrier-rate promotion does not price.

NOT_ENABLED

Free shipping is not enabled on the eshop.

NO_RULE_FOR_DESTINATION

No rule covers the destination.

PAID_TOTALS_MISSING

The rule compares what the buyer paid, and the order stated neither its totals nor every shipped line’s total.
Example
"APPLIED"

FreeShippingOriginalCostUnknownReasonEnum

Values
Enum Value Description

NO_RATE_QUOTED

No carrier rate was priced for this shipment, so there is no delivery charge to measure the saving against

SELECTION_NOT_QUOTED

The buyer's selected rate is not among the rates quoted for this shipment (a client-priced selection), so what they would have paid is unknowable
Example
"NO_RATE_QUOTED"

FreeShippingRestOfWorld

Description

Fallback free shipping deal applied when no rule matches the destination country

Fields
Field Name Description
codFee - Float Cash on delivery surcharge applied when this rule is active and the customer selects COD. Stated incl. VAT: a VAT-inclusive order is charged it as stated, a net-priced order its net at the order’s rate.
defaultCarrier - DeliveryCompany Default delivery company used for fulfillment when this rule is applied
minItemCount - Int Minimum number of product items required in the order for this rule to apply
name - String! Human-readable label for this rule, shown in admin UI
threshold - Float! Minimum order value for free shipping under this rule, on the SAME basis as the eshop's own order prices — VAT-inclusive for a VAT-inclusive eshop, matching what the storefront advertises. Not an ex-VAT figure.
thresholdBasis - FreeShippingThresholdBasisEnum What the threshold compares against, counting the lines that ship and nothing else: PAID (the default) is what the buyer paid and CATALOG the pre-discount product sum; each value names the figures it reads. Every major platform evaluates its own free-shipping minimum post-discount.
waiveCodFee - Boolean Whether to absorb the COD fee in the free shipping promotion under this rule
excludedCountries - [String!] ISO 3166-1 alpha-2 country codes that receive no free shipping at all
Example
{
  "codFee": 987.65,
  "defaultCarrier": DeliveryCompany,
  "minItemCount": 987,
  "name": "abc123",
  "threshold": 987.65,
  "thresholdBasis": "CATALOG",
  "waiveCodFee": true,
  "excludedCountries": ["xyz789"]
}

FreeShippingRule

Description

A region-scoped free shipping rule (named country group with optional exclusions)

Fields
Field Name Description
_id - ObjectID
codFee - Float Cash on delivery surcharge applied when this rule is active and the customer selects COD. Stated incl. VAT: a VAT-inclusive order is charged it as stated, a net-priced order its net at the order’s rate.
defaultCarrier - DeliveryCompany Default delivery company used for fulfillment when this rule is applied
minItemCount - Int Minimum number of product items required in the order for this rule to apply
name - String! Human-readable label for this rule, shown in admin UI
threshold - Float! Minimum order value for free shipping under this rule, on the SAME basis as the eshop's own order prices — VAT-inclusive for a VAT-inclusive eshop, matching what the storefront advertises. Not an ex-VAT figure.
thresholdBasis - FreeShippingThresholdBasisEnum What the threshold compares against, counting the lines that ship and nothing else: PAID (the default) is what the buyer paid and CATALOG the pre-discount product sum; each value names the figures it reads. Every major platform evaluates its own free-shipping minimum post-discount.
waiveCodFee - Boolean Whether to absorb the COD fee in the free shipping promotion under this rule
countries - [String!]! ISO 3166-1 alpha-2 country codes this rule applies to
excludedCountries - [String!] ISO 3166-1 alpha-2 country codes carved out of this rule
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "codFee": 123.45,
  "defaultCarrier": DeliveryCompany,
  "minItemCount": 123,
  "name": "abc123",
  "threshold": 123.45,
  "thresholdBasis": "CATALOG",
  "waiveCodFee": true,
  "countries": ["abc123"],
  "excludedCountries": ["xyz789"]
}

FreeShippingThresholdBasisEnum

Values
Enum Value Description

CATALOG

Threshold compares against the pre-discount value of the lines that ship: their stated lineSubtotal when every one states it, otherwise price × quantity.

PAID

Threshold compares against what the buyer paid for the lines that ship: their stated lineTotal when every one states it, otherwise the order's itemsSubtotal minus discountTotal when every line ships. Any other order earns no free shipping, never a pre-discount figure: the producer must send its money at quote time.
Example
"CATALOG"

FulfillmentType

Description

How a shipment is fulfilled. carrier is a Pircel-mapped courier with a deliveryCompany and full automation. external is an unmappable third-party courier the merchant arranges (ships, but no carrier automation; reassignable to a real carrier later). pickup is collect-from-store (nothing ships). in-store is a counter sale, sold and handed over at the store (nothing ships).

Values
Enum Value Description

CARRIER

Pircel-mapped carrier

EXTERNAL

Unmappable third-party courier arranged by the merchant

IN_STORE

Sold and handed over at the store's counter; nothing ships

PICKUP

Collect from store; nothing ships
Example
"CARRIER"

GeneralBuyerEmailsConfig

Description

Settings for the delivery-status emails buyers receive

Fields
Field Name Description
replyTo - String Where a buyer's reply goes. Null means no Reply-To: replies reach Pircel's sending address.
Example
{"replyTo": "xyz789"}

GeneralCheckoutConfig

Description

Checkout-related general settings

Fields
Field Name Description
defaultCarrier - DeliveryCompany Optional carrier pinned to be pre-selected at checkout when defaultSelection is AUTO
defaultSelection - CheckoutDefaultSelectionEnum Whether a rate is pre-selected at checkout (AUTO) or left to the buyer (NONE). Defaults to AUTO.
rateSorting - RateSortingEnum How available shipping rates are ordered at checkout. Defaults to PRICE_ASC.
Example
{
  "defaultCarrier": DeliveryCompany,
  "defaultSelection": "AUTO",
  "rateSorting": "FASTEST"
}

GeneralConfig

Description

General settings configuration for an eshop

Fields
Field Name Description
buyerEmails - GeneralBuyerEmailsConfig Delivery-status emails: they are sent as " via Pircel" from Pircel's address, unless a template names its own sender
checkout - GeneralCheckoutConfig Checkout-related general settings
dataRetention - GeneralDataRetentionConfig! How long the eshop's recipients' details are kept
voucher - GeneralVoucherConfig Voucher-related general settings: what reaches the carrier when a label is minted
Example
{
  "buyerEmails": GeneralBuyerEmailsConfig,
  "checkout": GeneralCheckoutConfig,
  "dataRetention": GeneralDataRetentionConfig,
  "voucher": GeneralVoucherConfig
}

GeneralDataRetentionConfig

Description

How long Pircel keeps the eshop's recipients' details, counted from a shipment's last status change: when it was finished (delivered, collected, returned or cancelled), or its last status update for one that never finishes. Each period is applied by the next daily retention pass.

Fields
Field Name Description
recipientDetailsDefaultMonths - Int! Months the default keeps them, while the eshop sets none.
recipientDetailsMerchantOnlyAboveMonths - Int! Longer settings take the merchant's own user, saving after the dashboard's notice; anyone else is refused with updateEshopSettings.retentionPeriodMerchantOnly.
recipientDetailsMonths - Int! Months every recipient detail is kept: name, address, phone, email, notes, labels and coordinates. The eshop's setting, else the default.
recipientDetailsSetAt - DateTime When the setting was last changed; null while default.
recipientDetailsSettingRange - MonthsRange! The months the setting may take.
Example
{
  "recipientDetailsDefaultMonths": 123,
  "recipientDetailsMerchantOnlyAboveMonths": 987,
  "recipientDetailsMonths": 123,
  "recipientDetailsSetAt": "2007-12-03T10:15:30Z",
  "recipientDetailsSettingRange": MonthsRange
}

GeneralVoucherConfig

Description

Voucher-related general settings

Fields
Field Name Description
includeBuyerNotes - Boolean Whether a voucher carries the buyer's own delivery notes (Shipment.buyerNotes) to the carrier, appended to whatever notes the caller passes. Null means this eshop has never chosen, and the system default applies: buyer notes are NOT sent. createVoucher.includeBuyerNotes overrides it for a single call.
Example
{"includeBuyerNotes": true}

GenikiFields

Fields
Field Name Description
chargeCode - String The charge code of another Geniki customer that should be charged for this shipment.
jobId - Int Job ID assigned by Geniki.
Example
{"chargeCode": "abc123", "jobId": 987}

GenikiInput

Fields
Input Field Description
chargeCode - String The charge code of another Geniki customer that should be charged for this shipment.
jobId - Int Job ID assigned by Geniki.
Example
{"chargeCode": "xyz789", "jobId": 987}

GoodsRateCategoryEnum

Description

VAT rate class of the eshop's goods.

Values
Enum Value Description

STANDARD

The only supported class. Onboarding a reduced-rated eshop means extending the taxation dataset first; until then resolution fails closed rather than guessing a rate.
Example
"STANDARD"

ID

Description

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

Example
"4"

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
123

JSON

Description

The JSON scalar type represents JSON values as specified by ECMA-404.

Example
{}

JSONObject

Description

The JSONObject scalar type represents JSON objects as specified by ECMA-404.

Example
{}

LabelDimensions

Description

Real label dimensions in PDF points (1 pt = 1/72"). Populated when the document was cropped to its ink bounding box at storage time.

Fields
Field Name Description
height - Float
width - Float
Example
{"height": 123.45, "width": 123.45}

MerchantNoticeKind

Description

A text Pircel supplies to merchants for their own use.

Values
Enum Value Description

SHOPPER_NOTICE_PARAGRAPH

The paragraph for the merchant's own privacy notice, telling shoppers how Pircel prices deliveries at checkout.
Example
"SHOPPER_NOTICE_PARAGRAPH"

MerchantNoticeRecord

Description

When a version of a text was first supplied to the eshop, each way. Null where it has not been.

Fields
Field Name Description
copiedAt - DateTime
dismissedAt - DateTime
emailedAt - DateTime When Pircel first emailed it to the eshop's users.
kind - MerchantNoticeKind!
shownAt - DateTime
version - String! The text version's date slug.
Example
{
  "copiedAt": "2007-12-03T10:15:30Z",
  "dismissedAt": "2007-12-03T10:15:30Z",
  "emailedAt": "2007-12-03T10:15:30Z",
  "kind": "SHOPPER_NOTICE_PARAGRAPH",
  "shownAt": "2007-12-03T10:15:30Z",
  "version": "abc123"
}

MonthsRange

Description

A range of whole months, both ends included.

Fields
Field Name Description
max - Int!
min - Int!
Example
{"max": 123, "min": 987}

MultiPieceCapability

Fields
Field Name Description
maxPieces - Int Carrier-enforced cap on parcels per shipment. Null when there is no documented cap.
supported - Boolean! Whether the carrier supports multiple parcels in a single shipment.
Example
{"maxPieces": 987, "supported": true}

NotificationPreferences

Description

Email notification trigger preferences per delivery company. Controls when customer notifications are sent.

Fields
Field Name Description
onInTransit - Boolean Send notification when carrier first scans the package (in-transit, picked-up, or out-for-delivery status).
onPickupCreate - Boolean Send notification when pickup list is created.
onVoucherCreate - Boolean Send notification when voucher/label is created.
Example
{"onInTransit": false, "onPickupCreate": false, "onVoucherCreate": true}

NotificationSent

Description

Record of a sent email notification.

Fields
Field Name Description
sentAt - DateTime! Timestamp when the notification was sent
trigger - NotificationTriggerEnum! The notification trigger type
Example
{
  "sentAt": "2007-12-03T10:15:30Z",
  "trigger": "IN_TRANSIT"
}

NotificationTriggerEnum

Description

Types of email notification triggers for shipments.

Values
Enum Value Description

IN_TRANSIT

Triggered when carrier first scans the package

PICKUP_SCHEDULED

Triggered when pickup list is created

VOUCHER_CREATED

Triggered when voucher/label is created
Example
"IN_TRANSIT"

ObjectID

Description

A field whose value conforms with the standard mongodb object ID as described here: https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectId. Example: 5e5677d71bdc2ae76344968c

Example
"5e5677d71bdc2ae76344968c"

OrderAmounts

Description

The order totals as the seller stated them, ingested verbatim (amounts-first contract) — from a commerce platform relaying its storefront, or from a merchant stating them on a dashboard-created order. The COD collectible is amountDue when present, else grandTotal; Pircel never recomputes these.

Fields
Field Name Description
amountDue - Float What remains to be paid, and therefore the at-door COD collectible. Gift cards, store credit and partial payments are tenders, not discounts: they reduce this and never grandTotal. A verbatim 0 means "collect nothing".
anomalies - [OrderAmountsAnomaly!]! What is suspicious but not impossible in the money as stated: recomputed on every write that states it, and the ones read against the costs on every write. Empty on orders stored before they were kept.
currency - String ISO 4217 currency of all amounts (EUR).
discountLines - [OrderDiscountLine] The platform's per-discount breakdown (coupons, automatic promotions, manual edits). Metadata only.
discountTotal - Float Total coupon/cart/automatic discount the buyer saw, on the order's price basis. Sale prices are already baked into itemsSubtotal.
feeLines - [OrderFeeLine] Store-charged fee lines (COD surcharges, gift wrap, tips, levies). Signed amounts; metadata only.
feesTotal - Float Sum of store-charged fee lines the buyer paid, on the order's price basis — the SAME basis as itemsSubtotal and discountTotal (gross, the fee's tax included, for a tax-inclusive store; net for a tax-exclusive one, the fee's tax in totalTax), or the totals identity cannot close. Signed: platforms allow negative pseudo-discount fee lines.
grandTotal - Float The platform's order grand total, verbatim: the buyer's full obligation for the order BEFORE any tender is applied against it. Discounts are already inside it; gift cards and other prepayments are not — those reduce amountDue.
itemsSubtotal - Float Line items as sold (post-sale-price, pre coupon/cart discounts), on the order's price basis.
payments - [OrderPayment] Tenders already applied against this order (gift cards, store credit, deposits, captures). Metadata only.
prepaidTotal - Float What has already been paid against this order, as the seller states it (EN 16931 BT-113). Never summed by Pircel from payments — a total derived from the lines would be Pircel inventing the buyer's money. Send the lines AND the total; lines alone record an anomaly.
pricesIncludeTax - Boolean Per-order basis tag: whether the order amounts include tax. Absent when the order was not tagged.
refundedTotal - Float What the platform states it has refunded in total. Never summed by Pircel from refunds: with refunds and no total, show "refunded, amount not stated". Refunded when within a cent of grandTotal, partly refunded when between 0 and it.
refunds - [OrderRefund!] The refunds the platform completed, one per refund record; null when none were stated.
shippingTax - Float Tax on the platform's shipping charge.
shippingTotal - Float What the buyer pays for shipping, post shipping-discount, on the order's price basis — the SAME basis as itemsSubtotal and discountTotal. On a tax-inclusive store this INCLUDES shippingTax; sending it net there fails ingestion with inconsistent-totals by exactly the shipping VAT.
taxLines - [OrderTaxLine] The platform's per-rate tax breakdown (metadata only).
totalTax - Float Total tax on the order. Already INSIDE grandTotal on a tax-inclusive store; ADDED to the other parts to reach it on a tax-exclusive one — which is why the totals identity adds it only in the exclusive case. Required on a tax-exclusive order for that identity to run at all; without it only plausibility bounds are checked.
Example
{
  "amountDue": 123.45,
  "anomalies": [OrderAmountsAnomaly],
  "currency": "xyz789",
  "discountLines": [OrderDiscountLine],
  "discountTotal": 123.45,
  "feeLines": [OrderFeeLine],
  "feesTotal": 987.65,
  "grandTotal": 987.65,
  "itemsSubtotal": 987.65,
  "payments": [OrderPayment],
  "prepaidTotal": 987.65,
  "pricesIncludeTax": false,
  "refundedTotal": 123.45,
  "refunds": [OrderRefund],
  "shippingTax": 123.45,
  "shippingTotal": 987.65,
  "taxLines": [OrderTaxLine],
  "totalTax": 123.45
}

OrderAmountsAnomaly

Description

Something suspicious but not impossible in the order money, recorded and never refused.

Fields
Field Name Description
detail - JSONObject! The anomaly's own figures, under the keys its check uses: euros, or cents where the key ends in Cents.
type - OrderAmountsAnomalyTypeEnum!
Example
{"detail": {}, "type": "AMOUNT_DUE_OVER_TOTAL_WITHIN_TOLERANCE"}

OrderAmountsAnomalyTypeEnum

Description

A kind of order-money anomaly.

Values
Enum Value Description

AMOUNT_DUE_OVER_TOTAL_WITHIN_TOLERANCE

COD_TENDER_CAPTURED

DISCOUNT_LINES_SUM_MISMATCH

DIVERGES_FROM_DERIVED_TOTAL

FEE_LINES_SUM_MISMATCH

FEES_TOTAL_UNSTATED

FREE_SHIPPING_CONTRADICTS_PLATFORM_SHIPPING

ITEMS_SUBTOTAL_DIVERGES_FROM_LINES

LINE_SUBTOTALS_SUM_MISMATCH

LINE_TOTAL_MISMATCH

LINE_TOTALS_DISAGREE_WITH_DISCOUNTED_SUBTOTAL

PAYMENTS_SUM_MISMATCH

PREPAID_PLUS_DUE_MISMATCH

PREPAID_TOTAL_UNSTATED

REFUNDED_EXCEEDS_TOTAL

REFUNDED_TOTAL_UNSTATED

REFUNDS_SUM_MISMATCH

SHIPPING_TAX_CONTRADICTS_RATE

STORE_COD_FEE_DOUBLED

The platform charged its own cash-on-delivery fee (a COD_FEE fee line) on top of a shipping total that already covered Pircel's buyer charge, so the buyer paid the fee twice. Informational: nothing is blocked.

TAX_LINES_SUM_MISMATCH

TENDER_BASIS_UNSTATED

UNATTRIBUTED_PREPAYMENT

ZERO_AMOUNT_DUE_COD_ORDER

ZERO_TAX_COD_ORDER

Example
"AMOUNT_DUE_OVER_TOTAL_WITHIN_TOLERANCE"

OrderAmountsInput

Description

The order totals as the seller states them, sent verbatim — never recomputed here (amounts-first contract). Whoever originates the order owns these figures: a commerce platform relaying what its storefront charged, or a dashboard-created order where the merchant states them directly. The rule is the same either way — send a figure a human was shown and accepted, and omit one you would have to derive. The COD collectible is amountDue when present, else grandTotal; re-send on updates so refunds and edits carry through to the voucher. Shopify names below are Admin GraphQL fields, each read as its shopMoney amount.

Fields
Input Field Description
amountDue - Float What remains to be paid after every tender already applied — the at-door COD collectible, and the field that decides how much cash the courier takes. Always tax-inclusive, whatever pricesIncludeTax says. Send 0 for a fully-prepaid order; the voucher is then created without COD collection. Omit it rather than guessing: an absent value falls back to grandTotal, a wrong one is collected verbatim. It must rest on tenders actually applied — a selected payment method is an intent, not a captured payment. Never send more than is owed: under-reporting is a reporting defect, over-collecting from a buyer who already paid is not recoverable. Where it comes from: Shopify totalOutstandingSet, Magento total_due, WooCommerce total (always the residual — gift-card plugins reduce it in place, and the official extension before v1.8.0 omits the amount entirely).
currency - String! ISO 4217 currency of all amounts. Required; only EUR is accepted.
discountLines - [OrderDiscountLineInput] The per-discount breakdown behind discountTotal. Stored and rendered as metadata, never computed from — a total is never synthesised from its lines. Where it comes from: WooCommerce coupon_lines, Shopify discountApplications.
discountTotal - Float Total coupon/cart/automatic discount the buyer saw, on the order's price basis. Sale prices belong in itemsSubtotal, not here. A known zero is a fact and should be stated — the totals identity abstains entirely without it. Where it comes from: WooCommerce discount_total plus discount_tax on a tax-inclusive store; Shopify totalDiscountsSet.
feeLines - [OrderFeeLineInput] Seller-charged fee lines — COD surcharges, gift wrap, tips, statutory levies. Signed amounts. Where it comes from: WooCommerce fee_lines.
feesTotal - Float Total of the seller-charged fees the buyer paid (signed — negative pseudo-discount fees are legal). On the SAME basis as itemsSubtotal, discountTotal and shippingTotal, or the totals identity cannot close: including the fee's tax on a tax-inclusive order; on a tax-exclusive order the fee's tax belongs in totalTax. State it whenever feeLines carry a non-zero amount: an unstated total is not a stated zero, and the totals identity abstains rather than deriving one from the lines — which records an anomaly instead of validating the order.
grandTotal - Float! The buyer's full obligation for the order, verbatim, BEFORE any tender (gift card, store credit, deposit) is applied against it. Discounts and tax are always inside it, whatever pricesIncludeTax says. Never synthesise it from its parts — send a figure the buyer was shown and accepted, which on a seller-originated order means one the form displayed before submit. Where it comes from: Shopify totalPriceSet, which stays gross because Shopify models a gift card as a transaction. WooCommerce: send total here AND as amountDue, and never inflate it — WooCommerce stores only the residual (the official Gift Cards extension and the common third-party ones all reduce total), so a gross figure cannot be recovered and inventing one over-collects cash at the door.
itemsSubtotal - Float Line items as sold: post-sale-price, PRE coupon/cart discounts, on the order's price basis. Sent together with discountTotal and shippingTotal it enables the totals identity, which must compose to grandTotal within rounding tolerance; omit any of the three and that arithmetic check does not run at all. Where it comes from: WooCommerce Σ line subtotal(+tax), Shopify Σ line originalTotalSet (no order field holds it), Magento subtotal.
payments - [OrderPaymentInput] Tenders already applied against this order. A gift card or store credit sent as a discountLine is permanently recorded as a promotion — send it here.
prepaidTotal - Float What has already been paid against this order, as the seller states it (EN 16931 BT-113). Never summed by Pircel from payments — a total derived from the lines would be Pircel inventing the buyer's money. Send the lines AND the total; lines alone record an anomaly.
pricesIncludeTax - Boolean Whether the order amounts include tax (WooCommerce prices_include_tax, Shopify taxesIncluded). Falls back to the eshop's declared default when omitted, and must not contradict the legacy includeVat argument when both are sent — prefer this field alone; includeVat is a migration alias for callers that predate it. 🔴 ONE basis for the WHOLE payload — every amount here must be on the side of tax this flag names, except the money owed or paid — grandTotal, amountDue, prepaidTotal and payments — which always includes tax. A platform with independent per-component settings (Magento has separate price_includes_tax and shipping_includes_tax) must NORMALISE to one basis before sending, choosing each accessor by the flag it is about to send rather than by the setting that produced it. Mixing them fails ingestion with orderAmounts.inconsistentTotals, off by exactly the tax on the diverging component.
refundedTotal - Float What the platform states it has refunded in total, as it states prepaidTotal: never summed by Pircel from refunds. grandTotal stays as placed, and a refund changes no tender status. A sum of refunds that differs, or a total above grandTotal, is recorded as an anomaly, not refused.
refunds - [OrderRefundInput!] The refunds the platform completed, one per refund record. Send them all on every re-send: the list replaces the stored one.
shippingTax - Float Tax on the platform's shipping charge. Send it whenever it is known, even on a tax-inclusive order where it is already inside shippingTotal: it is what lets a shipping charge be read on either side of tax without re-deriving it from a rate.
shippingTotal - Float What the buyer pays for shipping, POST shipping-discount (WooCommerce shipping_total and Shopify shippingLine.discountedPriceSet are already post-discount). This is the seller's charge to the buyer, not Pircel's quote — they coincide only where the seller passes the quote through unchanged. On the SAME basis as itemsSubtotal and discountTotal — so on a tax-inclusive order it INCLUDES shippingTax, and sending it net there fails ingestion by exactly the shipping VAT.
taxLines - [OrderTaxLineInput] The per-rate tax breakdown behind totalTax. Stored and rendered as metadata, never computed from.
totalTax - Float Total tax on the order. Already INSIDE grandTotal on a tax-inclusive store; ADDED to the other parts to reach it on a tax-exclusive one — which is why the totals identity adds it only in the exclusive case. Required on a tax-exclusive order for that identity to run at all; without it only plausibility bounds are checked.
Example
{
  "amountDue": 987.65,
  "currency": "abc123",
  "discountLines": [OrderDiscountLineInput],
  "discountTotal": 987.65,
  "feeLines": [OrderFeeLineInput],
  "feesTotal": 123.45,
  "grandTotal": 123.45,
  "itemsSubtotal": 987.65,
  "payments": [OrderPaymentInput],
  "prepaidTotal": 987.65,
  "pricesIncludeTax": false,
  "refundedTotal": 123.45,
  "refunds": [OrderRefundInput],
  "shippingTax": 987.65,
  "shippingTotal": 123.45,
  "taxLines": [OrderTaxLineInput],
  "totalTax": 987.65
}

OrderBasisSourceEnum

Values
Enum Value Description

ESHOP_DEFAULT

LEGACY_INCLUDE_VAT

ORDER_TAG

Example
"ESHOP_DEFAULT"

OrderDiscountKindEnum

Values
Enum Value Description

AUTOMATIC

Platform rule applied without a code

COUPON

Buyer-entered code

MANUAL

Merchant order edit

OTHER

Anything else
Example
"AUTOMATIC"

OrderDiscountLine

Description

One coupon/promotion the platform applied — provenance, never computed from.

Fields
Field Name Description
amount - Float Discount amount of this line in the order currency.
code - String The coupon/promo code the buyer entered, if any.
kind - OrderDiscountKindEnum How the platform applied this discount.
label - String The platform's display label for this discount line.
Example
{
  "amount": 987.65,
  "code": "xyz789",
  "kind": "AUTOMATIC",
  "label": "xyz789"
}

OrderDiscountLineInput

Fields
Input Field Description
amount - Float Discount amount of this line in the order currency.
code - String The coupon/promo code the buyer entered, if any.
kind - OrderDiscountKindEnum How the platform applied this discount; map unknown kinds to OTHER.
label - String The platform's display label for this discount line.
Example
{
  "amount": 987.65,
  "code": "abc123",
  "kind": "AUTOMATIC",
  "label": "abc123"
}

OrderFeeKindEnum

Values
Enum Value Description

COD_FEE

Store-charged COD surcharge

GIFT_WRAP

Gift wrapping

LEVY

Statutory levy (e.g. recycling, plastic bag)

OTHER

Anything else

TIP

Buyer tip
Example
"COD_FEE"

OrderFeeLine

Description

One store-charged fee line (signed — platforms allow negative pseudo-discount fees).

Fields
Field Name Description
amount - Float Fee amount in the order currency (signed), on the order's basis: including the fee's tax on a tax-inclusive order; on a tax-exclusive order the fee's tax belongs in totalTax.
kind - OrderFeeKindEnum Best-effort fee classification; raw label always kept.
label - String The platform's display label for this fee line.
Example
{
  "amount": 123.45,
  "kind": "COD_FEE",
  "label": "abc123"
}

OrderFeeLineInput

Fields
Input Field Description
amount - Float Fee amount in the order currency (signed), on the order's basis: including the fee's tax on a tax-inclusive order; on a tax-exclusive order the fee's tax belongs in totalTax.
kind - OrderFeeKindEnum Best-effort fee classification; map unknown kinds to OTHER.
label - String The platform's display label for this fee line.
Example
{
  "amount": 987.65,
  "kind": "COD_FEE",
  "label": "abc123"
}

OrderPayment

Description

One tender already applied against the order. Tenders are NOT discounts: they reduce what remains to be paid without reducing what the order was worth.

Fields
Field Name Description
amount - Float Amount of this tender in the order currency.
capturedAt - DateTime When the platform captured this tender, if it says.
deductedFromGrandTotal - Boolean Whether the platform ALREADY subtracted this tender from the grandTotal it sent. Observed, never inferred: false on Shopify (a gift card is a transaction, the total stays gross), true on Magento and WooCommerce (gift-card plugins reduce the total in place). Omit it rather than guessing — the totals identity abstains and records an anomaly, where a wrong value fails a valid order or admits a wrong one.
kind - OrderPaymentKindEnum Tender type.
label - String The platform's display label for this tender.
reference - String The platform's own id for the tender (gift-card code, transaction id).
status - OrderPaymentStatusEnum Lifecycle state; only CAPTURED money has moved.
Example
{
  "amount": 987.65,
  "capturedAt": "2007-12-03T10:15:30Z",
  "deductedFromGrandTotal": false,
  "kind": "BANK_TRANSFER",
  "label": "abc123",
  "reference": "abc123",
  "status": "AUTHORIZED"
}

OrderPaymentInput

Description

A tender already applied against the order. Send gift cards, store credit, deposits and captures here — NEVER as a discountLine, which would inflate discount reporting and deflate revenue.

Fields
Input Field Description
amount - Float Amount of this tender in the order currency.
capturedAt - DateTime When it was captured.
deductedFromGrandTotal - Boolean Whether the platform ALREADY subtracted this tender from the grandTotal it sent. Observed, never inferred: false on Shopify (a gift card is a transaction, the total stays gross), true on Magento and WooCommerce (gift-card plugins reduce the total in place). Omit it rather than guessing — the totals identity abstains and records an anomaly, where a wrong value fails a valid order or admits a wrong one.
kind - OrderPaymentKindEnum Tender type.
label - String Display label.
reference - String Platform id for the tender.
status - OrderPaymentStatusEnum Lifecycle state. Defaults to CAPTURED when omitted, so send it explicitly for anything not yet taken.
Example
{
  "amount": 123.45,
  "capturedAt": "2007-12-03T10:15:30Z",
  "deductedFromGrandTotal": true,
  "kind": "BANK_TRANSFER",
  "label": "xyz789",
  "reference": "xyz789",
  "status": "AUTHORIZED"
}

OrderPaymentKindEnum

Description

Tender type. Enum-frozen: an unrecognised instrument is OTHER with its raw label, because widening this list later is a migration.

Values
Enum Value Description

BANK_TRANSFER

Bank transfer

CARD

Card payment

CASH

Cash taken in person

COD

Cash on delivery

DEPOSIT

Part payment taken up front

GIFT_CARD

Gift card redemption

OTHER

Anything the plugin cannot classify

STORE_CREDIT

Store credit / customer balance

VOUCHER

Prepaid voucher

WALLET

Wallet (PayPal balance, Apple Pay, ...)
Example
"BANK_TRANSFER"

OrderPaymentStatusEnum

Description

Only CAPTURED money has actually moved; the rest is intent and must not reduce a collectible.

Values
Enum Value Description

AUTHORIZED

Held but not taken

CAPTURED

Taken — the money moved

FAILED

Attempted and refused

PENDING

Awaiting settlement
Example
"AUTHORIZED"

OrderRefund

Description

A refund the platform completed on the order, as the platform states it. grandTotal stays as placed.

Fields
Field Name Description
adjustmentFee - Float A free-form amount the store kept back (Magento adjustment fee).
adjustmentRefund - Float A free-form amount the store added to the refund (Magento adjustment refund).
amount - Float! What was refunded, gross, in the order currency.
lines - [OrderRefundLine!] The lines the refund covers; null when none were stated.
paymentReference - String The tender the refund went back to, when known.
reference - String The platform's id for the refund (a credit memo).
refundedAt - DateTime When the platform completed the refund.
shippingAmount - Float The delivery part of the refund, gross, the cash-on-delivery fee included.
Example
{
  "adjustmentFee": 123.45,
  "adjustmentRefund": 123.45,
  "amount": 123.45,
  "lines": [OrderRefundLine],
  "paymentReference": "abc123",
  "reference": "abc123",
  "refundedAt": "2007-12-03T10:15:30Z",
  "shippingAmount": 987.65
}

OrderRefundInput

Description

A refund the platform has completed (for Magento, a credit memo in state refunded; an open or canceled memo is not one). Stated as the platform records it: on a cash-on-delivery order not yet delivered a refund usually means less to collect, which amountDue says, not this record.

Fields
Input Field Description
adjustmentFee - Float A free-form amount kept back from the refund (Magento adjustment fee).
adjustmentRefund - Float A free-form amount added to the refund (Magento adjustment refund).
amount - Float! What was refunded, gross, positive, in orderAmounts.currency (the store base currency).
lines - [OrderRefundLineInput!] The lines the refund covers. Their lineSubtotal and lineTotal, stated on every line, let the order's line checks count the refunded units beside products; without them the lines are provenance only.
paymentReference - String The tender the refund went back to, when known.
reference - String The platform's id for the refund (the credit memo).
refundedAt - DateTime When the platform completed the refund.
shippingAmount - Float The delivery part of the refund, gross, the cash-on-delivery fee included, as the booking counts delivery.
Example
{
  "adjustmentFee": 987.65,
  "adjustmentRefund": 123.45,
  "amount": 123.45,
  "lines": [OrderRefundLineInput],
  "paymentReference": "abc123",
  "reference": "abc123",
  "refundedAt": "2007-12-03T10:15:30Z",
  "shippingAmount": 987.65
}

OrderRefundLine

Description

A line a refund covers, with the refunded units' money when the store stated it.

Fields
Field Name Description
lineSubtotal - Float The refunded units as sold before discounts, as a product line states its lineSubtotal; null when not stated.
lineTotal - Float What the buyer paid for the refunded units, as a product line states its lineTotal; null when not stated.
quantity - Float! Units refunded.
restock - Boolean Whether the store returned the units to stock; null when it did not say.
sku - String The line's SKU.
storeLineId - String The refunded line's storeLineId.
Example
{
  "lineSubtotal": 987.65,
  "lineTotal": 123.45,
  "quantity": 987.65,
  "restock": true,
  "sku": "xyz789",
  "storeLineId": "abc123"
}

OrderRefundLineInput

Description

A line a refund covers. With its money stated, the order's line checks count the refunded units beside products, so an order that ships what is left still states its placed itemsSubtotal and discountTotal.

Fields
Input Field Description
lineSubtotal - Float The refunded units as sold before coupon or cart discounts, as ProductInput.lineSubtotal (unit price × refunded quantity). State it on every refunded line or none: the line-subtotal and lines-value checks count it only when every refunded line states it, and say nothing when only some do. A stated amount: 0 to 1,000,000 with at most 2 decimals, else orderAmounts.invalidAmount.
lineTotal - Float What the buyer paid for the refunded units after discounts, as ProductInput.lineTotal. Counted by the line-totals check on the same every-or-none rule. A stated amount, as lineSubtotal.
quantity - Float! Units refunded.
restock - Boolean Whether the store returned the units to stock. Omit it when the platform does not keep that.
sku - String The line's SKU.
storeLineId - String The refunded line's storeLineId.
Example
{
  "lineSubtotal": 123.45,
  "lineTotal": 987.65,
  "quantity": 987.65,
  "restock": true,
  "sku": "abc123",
  "storeLineId": "xyz789"
}

OrderTaxLine

Description

One line of the platform's tax breakdown (metadata only).

Fields
Field Name Description
amount - Float Tax amount of this line in the order currency.
label - String The platform's display label for this tax line.
ratePercent - Float Tax rate (0-100) the platform applied on this line.
Example
{
  "amount": 987.65,
  "label": "abc123",
  "ratePercent": 987.65
}

OrderTaxLineInput

Fields
Input Field Description
amount - Float Tax amount of this line in the order currency.
label - String The platform's display label for this tax line.
ratePercent - Float Tax rate (0-100) the platform applied on this line.
Example
{
  "amount": 987.65,
  "label": "abc123",
  "ratePercent": 123.45
}

OtherDocument

Fields
Field Name Description
documentType - OtherDocumentTypeEnum Type of the document.
encodedDocument - String Base64 encoded document content.
externalId - String External identifier for the document.
Example
{
  "documentType": "COMMERCIAL_INVOICE",
  "encodedDocument": "abc123",
  "externalId": "xyz789"
}

OtherDocumentTypeEnum

Values
Enum Value Description

COMMERCIAL_INVOICE

OTHER

PROFORMA_INVOICE

Example
"COMMERCIAL_INVOICE"

PageCustomization

Fields
Field Name Description
colorScheme - ColorScheme
Example
{"colorScheme": ColorScheme}

Parcel

Fields
Field Name Description
_id - ObjectID Unique identifier for this parcel within the shipment, automatically generated
billableWeight - Float Parcel's billable weight in kilograms. (The weight used for the price calculation. The greater of actual weight or volumetric weight)
contents - [ParcelContents] Products contained in this parcel with their quantities, enabling proper distribution across multiple parcels
dimensions - ParcelDimensions
returnVoucher - ParcelVoucher This parcel's carrier-issued RETURN voucher (reverse-logistics label + tracking number). Independent lifecycle from voucher — issued, canceled, and expires independently. Null until a return voucher has been created for this parcel.
volumetricWeight - Float Parcel's volumetric weight in kilograms. The overall size of a parcel measured in volumetric kilograms.
voucher - ParcelVoucher This parcel's carrier-issued FORWARD voucher (tracking number + label + references). Null until createVoucher runs successfully for this parcel. The reverse-logistics counterpart lives on returnVoucher.
weight - Float Parcel's weight in kilograms.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "billableWeight": 123.45,
  "contents": [ParcelContents],
  "dimensions": ParcelDimensions,
  "returnVoucher": ParcelVoucher,
  "volumetricWeight": 987.65,
  "voucher": ParcelVoucher,
  "weight": 987.65
}

ParcelContents

Fields
Field Name Description
productId - ObjectID! Reference to a product in the shipment
quantity - Int! Quantity of this product in this parcel
Example
{
  "productId": "5e5677d71bdc2ae76344968c",
  "quantity": 987
}

ParcelContentsInput

Fields
Input Field Description
productId - ObjectID! Reference to a product in the shipment by its _id
quantity - Int! Units of this product in this parcel: a whole number from 1 to 100,000, else shipmentInput.invalidNumber.
Example
{
  "productId": "5e5677d71bdc2ae76344968c",
  "quantity": 987
}

ParcelDimensions

Fields
Field Name Description
height - Float
length - Float
width - Float
Example
{"height": 987.65, "length": 987.65, "width": 123.45}

ParcelIdentityModeEnum

Values
Enum Value Description

NONE

Carrier has no concept of per-piece identity — a single voucher covers the entire shipment regardless of parcel count.

PIECE_ID

Carrier returns a stable per-piece identifier with each voucher. Round-trip via parcelVoucher.deliveryCompanyPieceId.

POSITIONAL

No per-piece identifier; pieces are matched by request/response array position. Adapters MUST preserve order.
Example
"NONE"

ParcelInput

Fields
Input Field Description
contents - [ParcelContentsInput!] Products contained in this parcel (optional, defaults to all products in first parcel if not specified)
height - Float Parcel height in centimeters, up to 1,000. 0 or absent means not stated; volumetric weight needs all three sides. A negative value is refused with shipmentInput.invalidNumber.
length - Float Parcel length in centimeters, up to 1,000. 0 or absent means not stated; volumetric weight needs all three sides. A negative value is refused with shipmentInput.invalidNumber.
weight - Float! Parcel weight in kilograms, from 0 to 1,000; 0 means unknown, and billing applies the tariff minimum. Otherwise shipmentInput.invalidNumber.
width - Float Parcel width in centimeters, up to 1,000. 0 or absent means not stated; volumetric weight needs all three sides. A negative value is refused with shipmentInput.invalidNumber.
Example
{
  "contents": [ParcelContentsInput],
  "height": 987.65,
  "length": 123.45,
  "weight": 987.65,
  "width": 987.65
}

ParcelVoucher

Description

Voucher / tracking number for a single parcel in a multi-piece shipment. Replaces the parcel's slot in the legacy flat Shipment.vouchers[] array.

Fields
Field Name Description
code - String! Carrier-assigned tracking number / voucher code.
createdAt - DateTime!
deliveryCompanyPieceId - String Carrier-internal piece key (e.g. FedEx packageSequenceNumber). Lets carrier callbacks map back to the right parcel without relying on positional ordering.
deliveryCompanyReference - String! Our reference for this parcel ({INTERNAL_SHORT}-{NN}) stamped in the carrier's primary reference slot and printed on the label.
label - ParcelVoucherLabel
merchantReference - String Optional secondary reference (sanitized merchant orderId) stamped in the carrier's second reference slot.
status - VoucherStatusEnum!
Example
{
  "code": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "deliveryCompanyPieceId": "abc123",
  "deliveryCompanyReference": "xyz789",
  "label": ParcelVoucherLabel,
  "merchantReference": "xyz789",
  "status": "ACTIVE"
}

ParcelVoucherLabel

Description

Carrier-issued shipping label for a single parcel, stored alongside the parcel's voucher.

Fields
Field Name Description
dimensions - LabelDimensions Real label dimensions in PDF points; absent for legacy labels created before cropping was introduced.
encodedDocument - String! Base64-encoded label PDF.
Example
{
  "dimensions": LabelDimensions,
  "encodedDocument": "abc123"
}

PickupAddress

Fields
Field Name Description
address - String Address string.
addressBookEntry - ObjectID Reference to an address book entry in the eshop address book.
city - String City.
country - String Country.
countryCode - String Country code.
name - String Location name.
postcode - String Postcode.
Example
{
  "address": "abc123",
  "addressBookEntry": "5e5677d71bdc2ae76344968c",
  "city": "xyz789",
  "country": "abc123",
  "countryCode": "xyz789",
  "name": "xyz789",
  "postcode": "abc123"
}

PickupListsList

Fields
Field Name Description
closeTime - String The time "HH:MM" representing the latest time for pickup
code - String Pickup list number
deliveryCompany - DeliveryCompany Delivery company for this pickup list
printDocument - String Pickup list document content or URL
readyTime - String The time "HH:MM" when the shipment(s) are ready for pickup
Example
{
  "closeTime": "abc123",
  "code": "abc123",
  "deliveryCompany": DeliveryCompany,
  "printDocument": "xyz789",
  "readyTime": "xyz789"
}

PickupTimeInput

Fields
Input Field Description
closeTime - String The latest time "HH:MM" that the shipment(s) can be picked up
deliveryCompany - DeliveryCompanyIDOrSlugInput! Delivery company to generate pickup list for (by ID or slug)
readyTime - String The time "HH:MM" when the shipment(s) are ready for pickup
Example
{
  "closeTime": "abc123",
  "deliveryCompany": DeliveryCompanyIDOrSlugInput,
  "readyTime": "xyz789"
}

PickupTimeModeEnum

Values
Enum Value Description

FIXED

NONE

RANGE

UNRESTRICTED

Example
"FIXED"

PickupTimeOptions

Fields
Field Name Description
closeOptions - [String]
fixedOptions - [String]
mode - PickupTimeModeEnum!
readyOptions - [String]
Example
{
  "closeOptions": ["xyz789"],
  "fixedOptions": ["abc123"],
  "mode": "FIXED",
  "readyOptions": ["xyz789"]
}

Platform

Values
Enum Value Description

MAGENTO2

SHOPIFY

WOOCOMMERCE

Example
"MAGENTO2"

PolicyAcceptance

Description

An eshop's acceptance of a policy version, by one of its users for the whole account.

Fields
Field Name Description
acceptedAt - DateTime!
acceptedBy - ObjectID! The user who accepted it.
policy - PolicyKind!
version - String!
Example
{
  "acceptedAt": "2007-12-03T10:15:30Z",
  "acceptedBy": "5e5677d71bdc2ae76344968c",
  "policy": "CUSTOMER_AGREEMENT",
  "version": "xyz789"
}

PolicyKind

Description

One of Pircel's merchant policies.

Values
Enum Value Description

CUSTOMER_AGREEMENT

DATA_PROCESSING_AGREEMENT

PRIVACY_POLICY

TERMS_OF_SERVICE

Example
"CUSTOMER_AGREEMENT"

PriceSourceEnum

Description

Who produced a quote's price: SERVER (the fan-out or a re-quote), CLIENT (the producer; an echo of a server quote adopts SERVER), ADMIN (modifyShipmentRatePricing).

Values
Enum Value Description

ADMIN

CLIENT

SERVER

Example
"ADMIN"

PricingComponent

Description

A single pricing component like a surcharge, tax, or fee

Fields
Field Name Description
amountCents - Int Amount of the pricing component
category - PricingComponentCategory Category of the pricing component
code - String Carrier-specific code for this component, if available
description - String Description of the pricing component
name - String Human-readable name of the pricing component
surchargeType - SurchargeType Type of surcharge, applicable when category is SURCHARGE
Example
{
  "amountCents": 987,
  "category": "BASE",
  "code": "xyz789",
  "description": "xyz789",
  "name": "abc123",
  "surchargeType": "ADDITIONAL_HANDLING"
}

PricingComponentCategory

Description

Categories of pricing components

Values
Enum Value Description

BASE

Base shipping charge

DUTY

Import/export duties

FEE

Processing or service fees

OTHER

Other fees/charges that don't fit other categories

SURCHARGE

Additional charges applied to shipment

TAX

Government taxes (VAT, sales tax, etc.)
Example
"BASE"

PricingComponentInput

Description

Input for defining a pricing component in the complete rate structure

Fields
Input Field Description
amount - Float Amount of the pricing component: at most 1,000,000 either side of 0, with at most 2 decimals, else shipmentInput.invalidNumber.
category - PricingComponentCategory Category of the pricing component
code - String Carrier-specific code for this component (optional)
description - String Description of the pricing component
name - String Human-readable name of the pricing component
surchargeType - SurchargeType Type of surcharge, applicable when category is SURCHARGE
Example
{
  "amount": 987.65,
  "category": "BASE",
  "code": "xyz789",
  "description": "abc123",
  "name": "xyz789",
  "surchargeType": "ADDITIONAL_HANDLING"
}

PricingTrace

Description

What this rate was priced from: the rate card and its version, the config in force, the zone resolution, the itemised ex-VAT legs, the VAT rates and their source, the weight, the engine and the instant. A quote is reproducible from it. Absent on a client-supplied rate.

Fields
Field Name Description
carrier - PricingTraceCarrier
config - PricingTraceConfig!
engine - String! The arithmetic that produced the price ('file-based-v1', 'tariff-v1', 'fedex-api-v1', 'ups-api-v1').
lines - [PricingTraceLine!] The itemised legs a tariff document priced; absent under the file engine and for an API carrier.
options - PricingTraceOptions The options the quote applied; absent when the tariff pins no catalogue.
quotedAt - DateTime! When this service was priced; the tax point a replay uses.
resolution - PricingTraceResolution
tariff - PricingTraceTariff
vat - PricingTraceVat
weight - PricingTraceWeight
Example
{
  "carrier": PricingTraceCarrier,
  "config": PricingTraceConfig,
  "engine": "xyz789",
  "lines": [PricingTraceLine],
  "options": PricingTraceOptions,
  "quotedAt": "2007-12-03T10:15:30Z",
  "resolution": PricingTraceResolution,
  "tariff": PricingTraceTariff,
  "vat": PricingTraceVat,
  "weight": PricingTraceWeight
}

PricingTraceAppliedOption

Fields
Field Name Description
carrierCode - String The carrier's own code the voucher will carry.
code - String!
trigger - CarrierOptionTrigger!
Example
{
  "carrierCode": "abc123",
  "code": "abc123",
  "trigger": "REQUESTED"
}

PricingTraceCarrier

Description

An API carrier's rated detail for this service as the response stated it, with a digest.

Fields
Field Name Description
detail - JSON
digest - String
Example
{"detail": {}, "digest": "xyz789"}

PricingTraceConfig

Description

The eshop-carrier money knobs in force at the quote.

Fields
Field Name Description
fuelSurchargePercent - Float The eshop's fuel surcharge in percent in force at the quote; null when none was set. A percent too small to make a cent adds no fuel line.
minimumPrice - Float!
priceMultiplier - Float!
roundingIncrement - Float!
Example
{
  "fuelSurchargePercent": 987.65,
  "minimumPrice": 123.45,
  "priceMultiplier": 987.65,
  "roundingIncrement": 987.65
}

PricingTraceLine

Description

One priced charge, ex-VAT and pre-markup, with the bases it was priced on.

Fields
Field Name Description
band - Int
basis - JSON The carrier basis the line was priced on; a replay at another weight needs no tariff read.
basisKind - TariffBasisKindEnum!
buyerBasis - JSON The buyer basis, when it differs from the carrier basis.
buyerCents - Int!
carrierCents - Int!
category - TariffChargeCategoryEnum!
code - String!
markupExempt - Boolean!
option - String The catalogue option this line prices, when it is an option’s.
percentOfCents - Int
steps - Int Whole weight steps charged above the included weight.
surchargeType - String
Example
{
  "band": 123,
  "basis": {},
  "basisKind": "FLAT",
  "buyerBasis": {},
  "buyerCents": 987,
  "carrierCents": 987,
  "category": "BASE",
  "code": "xyz789",
  "markupExempt": false,
  "option": "abc123",
  "percentOfCents": 987,
  "steps": 987,
  "surchargeType": "xyz789"
}

PricingTraceNearMiss

Description

The best fuzzy hit in an exception list that did not fire; recorded, never priced.

Fields
Field Name Description
score - Float!
settlement - String!
zone - String!
Example
{
  "score": 123.45,
  "settlement": "abc123",
  "zone": "xyz789"
}

PricingTraceOptions

Description

The catalogue options this quote applied: derived from the order and requested, with their carrier codes.

Fields
Field Name Description
applied - [PricingTraceAppliedOption!]
superseded - [PricingTraceSupersededOption!]
unevaluated - [PricingTraceUnevaluatedConstraint!]
Example
{
  "applied": [PricingTraceAppliedOption],
  "superseded": [PricingTraceSupersededOption],
  "unevaluated": [PricingTraceUnevaluatedConstraint]
}

PricingTraceResolution

Description

How the zone was chosen, stamped so a fallback is a query, not a memory.

Fields
Field Name Description
billedAs - [String!] The zone's billedAs at the quote: what the carrier prints on an invoice line for it.
candidates - [String!]!
countryGroup - String!
nearMiss - PricingTraceNearMiss
postcode - String!
priority - Int
route - TariffZoneRouteEnum!
settlementKeyed - Boolean True when a settlement-keyed area the tariff references lists the postcode, so the city moves the price.
settlementMatched - String
settlementQuery - String
zone - String!
Example
{
  "billedAs": ["abc123"],
  "candidates": ["xyz789"],
  "countryGroup": "xyz789",
  "nearMiss": PricingTraceNearMiss,
  "postcode": "xyz789",
  "priority": 123,
  "route": "SETTLEMENT_MATCH",
  "settlementKeyed": true,
  "settlementMatched": "xyz789",
  "settlementQuery": "abc123",
  "zone": "abc123"
}

PricingTraceSupersededOption

Description

A derived option a requested variant replaced (cod by cod-cheque).

Fields
Field Name Description
by - String!
code - String!
Example
{
  "by": "abc123",
  "code": "xyz789"
}

PricingTraceTariff

Description

The rate card a tariff carrier priced from. Absent for an API carrier.

Fields
Field Name Description
contentHash - String The published version's content hash; a mismatch on read is an integrity failure.
id - ObjectID
key - String '/' for a checked-in file.
route - TariffRouteEnum
source - TariffSourceEnum!
version - Int
Example
{
  "contentHash": "abc123",
  "id": "5e5677d71bdc2ae76344968c",
  "key": "xyz789",
  "route": "AGREEMENT",
  "source": "FILES",
  "version": 123
}

PricingTraceUnevaluatedConstraint

Description

A catalogue constraint no fact could decide at quote (delivery-day without a delivery date); the carrier keeps it.

Fields
Field Name Description
constraint - String!
option - String
why - String!
Example
{
  "constraint": "xyz789",
  "option": "xyz789",
  "why": "xyz789"
}

PricingTraceVat

Fields
Field Name Description
buyerRatePercent - Float
buyerRateSource - PricingTraceVatRateSourceEnum!
carrierRatePercent - Float
Example
{
  "buyerRatePercent": 987.65,
  "buyerRateSource": "TARIFF",
  "carrierRatePercent": 123.45
}

PricingTraceVatRateSourceEnum

Description

Where the buyer VAT rate came from: the rate card's lane rate, the eshop's law-mode resolution, the carrier's response, or none (priced ex-VAT with no rate).

Values
Enum Value Description

TARIFF

LAW

CARRIER

NONE

Example
"TARIFF"

PricingTraceWeight

Fields
Field Name Description
billableKg - Float!
parcelCount - Int!
perParcelMinimumKg - Float!
Example
{"billableKg": 987.65, "parcelCount": 123, "perParcelMinimumKg": 123.45}

PrintVoucherPayload

Fields
Field Name Description
document - String! Base64-encoded PDF containing every active label for the shipment, merged into a single document according to the carrier's configured outputMedium and stickerLayout.
Example
{"document": "xyz789"}

Product

Description

A line on a shipment, as sold to the buyer.

Fields
Field Name Description
_id - ObjectID Server-generated identifier for this line within the shipment.
categories - [String] The categories this line's product belongs to, as the source platform names them. A list because products are in several: WooCommerce and Magento assign many, and Shopify has one category but many collections. Free-form strings rather than an enum — the vocabulary is the merchant's, so no fixed set can hold it. Carrier rules that exclude categories match on these; the rule fires if ANY of them is excluded.
countryOfOrigin - String The country the product was manufactured in.
description - String A brief description of the product.
dimensions - ProductDimensions The dimensions of the product.
externalId - String The product's identifier in the source platform.
extraAttributes - [ProductExtraAttributesEnumType] Handling attributes that apply to this line.
harmonizedSystemCode - String The Harmonized System code used to classify the product for customs.
image - String Full URL to the product's image.
kind - ProductKind What the buyer receives on this line. Reporting only, and never used to decide whether the line is shipped. Absent means unclassified, which is distinct from OTHER.
lineDiscount - Float Discount the platform allocated to this line (coupon/cart/automatic), verbatim (WooCommerce line subtotal − total, Shopify discountAllocations).
lineSubtotal - Float This line as sold before coupon/cart discounts (unit price × quantity at the sold price), verbatim from the platform.
lineTotal - Float What the buyer pays for this line after discounts, verbatim from the platform.
metadata - String Additional platform data for this line, JSON-encoded by convention. Stored exactly as sent and returned on reads; never parsed, so it need not be valid JSON. At most 16 KiB (16,384 bytes of UTF-8) per line: a longer value is refused with addShipment.productMetadataTooLarge or updateShipment.productMetadataTooLarge, extensions.index naming the line and extensions.limit the cap, never truncated.
price - Float! Unit price as sold, BEFORE coupon/cart discounts, on the eshop's own order price basis (VAT-inclusive for a VAT-inclusive eshop). Where lineSubtotal is sent it is authoritative; price × quantity, rounded half away from zero to the cent, is expected to match it. Load-bearing beyond display: it drives the free-shipping catalog threshold, and on a shipment carrying no orderAmounts it is what the COD collectible is derived from — so a post-discount value here silently under-collects, and a pre-discount one over-collects once a buyer used a coupon.
quantity - Int! Number of units on this line.
requiresShipping - Boolean Whether this line is physically shipped to the buyer. Determines the parcel contents, billable weight, carrier rates, delivery charge and customs declaration. Set it per line rather than per product, since a product can sell as digital or physical depending on the variation chosen. Omitting it treats the line as shipped.
sku - String Stock keeping unit identifying the product.
storeLineId - String The store's stable key for this line, the same from quote to order, like Shopify's line item id. Chosen by the store and never interpreted by Pircel; externalId stays the catalogue product id. Unique within a shipment: a duplicate is refused with products.duplicateStoreLineId. Omitted on a line that matches a stored one (by _id), the stored key is kept, so a client that does not know it need not echo it.
title - String Name of the product.
weight - Float Weight of a single unit in kilograms.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "categories": ["abc123"],
  "countryOfOrigin": "abc123",
  "description": "xyz789",
  "dimensions": ProductDimensions,
  "externalId": "abc123",
  "extraAttributes": ["GIFT"],
  "harmonizedSystemCode": "xyz789",
  "image": "abc123",
  "kind": "DIGITAL_GOOD",
  "lineDiscount": 123.45,
  "lineSubtotal": 123.45,
  "lineTotal": 987.65,
  "metadata": "xyz789",
  "price": 987.65,
  "quantity": 123,
  "requiresShipping": true,
  "sku": "xyz789",
  "storeLineId": "abc123",
  "title": "abc123",
  "weight": 123.45
}

ProductDimensions

Description

The dimensions of a product in centimeters.

Fields
Field Name Description
height - Float Height in centimeters.
length - Float Length in centimeters.
width - Float Width in centimeters.
Example
{"height": 987.65, "length": 987.65, "width": 123.45}

ProductDimensionsInput

Description

The dimensions of a product in centimeters, each up to 1,000. 0 or absent means a side not stated, and only stated sides are stored; a negative side is refused with shipmentInput.invalidNumber.

Fields
Input Field Description
height - Float Height in centimeters.
length - Float Length in centimeters.
width - Float Width in centimeters.
Example
{"height": 987.65, "length": 987.65, "width": 987.65}

ProductExtraAttributesEnumType

Description

Handling attributes that affect how a product is shipped.

Values
Enum Value Description

GIFT

Sent as a gift.
Example
"GIFT"

ProductInput

Description

A line to record on a shipment.

Fields
Input Field Description
categories - [String] The categories this line's product belongs to, as the source platform names them. A list because products are in several: WooCommerce and Magento assign many, and Shopify has one category but many collections. Free-form strings rather than an enum — the vocabulary is the merchant's, so no fixed set can hold it. Carrier rules that exclude categories match on these; the rule fires if ANY of them is excluded.
countryOfOrigin - String The country the product was manufactured in.
description - String A brief description of the product.
dimensions - ProductDimensionsInput The dimensions of the product.
externalId - String The product's identifier in the source platform.
extraAttributes - [ProductExtraAttributesEnumType] Handling attributes that apply to this line.
harmonizedSystemCode - String The Harmonized System code used to classify the product for customs.
image - String Full URL to the product's image.
kind - ProductKind What the buyer receives on this line. Reporting only, and never used to decide whether the line is shipped. Absent means unclassified, which is distinct from OTHER.
lineDiscount - Float Discount the platform allocated to this line (coupon/cart/automatic), verbatim (WooCommerce line subtotal − total, Shopify discountAllocations). A stated amount: 0 to 1,000,000 with at most 2 decimals, else orderAmounts.invalidAmount.
lineSubtotal - Float This line as sold before coupon/cart discounts (unit price × quantity at the sold price), verbatim from the platform. A stated amount: 0 to 1,000,000 with at most 2 decimals, else orderAmounts.invalidAmount.
lineTotal - Float What the buyer pays for this line after discounts, verbatim from the platform. A stated amount: 0 to 1,000,000 with at most 2 decimals, else orderAmounts.invalidAmount.
metadata - String Additional platform data for this line, JSON-encoded by convention. Stored exactly as sent and returned on reads; never parsed, so it need not be valid JSON. At most 16 KiB (16,384 bytes of UTF-8) per line: a longer value is refused with addShipment.productMetadataTooLarge or updateShipment.productMetadataTooLarge, extensions.index naming the line and extensions.limit the cap, never truncated.
price - Float! Unit price as sold, BEFORE coupon/cart discounts, on the eshop's own order price basis (VAT-inclusive for a VAT-inclusive eshop). Where lineSubtotal is sent it is authoritative; price × quantity, rounded half away from zero to the cent, is expected to match it. Load-bearing beyond display: it drives the free-shipping catalog threshold, and on a shipment carrying no orderAmounts it is what the COD collectible is derived from — so a post-discount value here silently under-collects, and a pre-discount one over-collects once a buyer used a coupon. A unit price: 0 to 1,000,000 with at most 6 decimals, else orderAmounts.invalidAmount.
quantity - Int! Number of units on this line. A whole number from 1 to 100,000, else shipmentInput.invalidNumber.
requiresShipping - Boolean Whether this line is physically shipped to the buyer. Determines the parcel contents, billable weight, carrier rates, delivery charge and customs declaration. Set it per line rather than per product, since a product can sell as digital or physical depending on the variation chosen. Omitting it treats the line as shipped.
sku - String Stock keeping unit identifying the product. Kept exactly as sent; an empty one is none.
storeLineId - String The store's stable key for this line, the same from quote to order, like Shopify's line item id. Chosen by the store and never interpreted by Pircel; externalId stays the catalogue product id. Unique within a shipment: a duplicate is refused with products.duplicateStoreLineId. Omitted on a line that matches a stored one (by _id), the stored key is kept, so a client that does not know it need not echo it.
title - String Name of the product. Trimmed; sent blank, it is refused with shipmentInput.required.
weight - Float Weight of a single unit in kilograms. From 0 to 1,000; 0 means unknown. Otherwise shipmentInput.invalidNumber.
_id - ObjectID Echo back the line's _id from a previous read to keep it the SAME line. products is replaced as a whole array, so a line sent without one is a new line and is given a new id — which strands any parcel manifest that referenced the old one. Omit it only for a line that is genuinely new.
Example
{
  "categories": ["xyz789"],
  "countryOfOrigin": "xyz789",
  "description": "abc123",
  "dimensions": ProductDimensionsInput,
  "externalId": "xyz789",
  "extraAttributes": ["GIFT"],
  "harmonizedSystemCode": "xyz789",
  "image": "abc123",
  "kind": "DIGITAL_GOOD",
  "lineDiscount": 987.65,
  "lineSubtotal": 987.65,
  "lineTotal": 123.45,
  "metadata": "abc123",
  "price": 987.65,
  "quantity": 123,
  "requiresShipping": false,
  "sku": "xyz789",
  "storeLineId": "xyz789",
  "title": "abc123",
  "weight": 987.65,
  "_id": "5e5677d71bdc2ae76344968c"
}

ProductKind

Description

What the buyer receives on an order line. Reporting only: whether a line is shipped is determined by requiresShipping, never by this field. Omit it when the source platform cannot distinguish one kind from another.

Values
Enum Value Description

DIGITAL_GOOD

Delivered electronically, such as a download, licence key or access grant. A downloadable file is not required.

GIFT_CARD

Stored value, either physical or digital. Read requiresShipping to tell which.

OTHER

A kind outside this list. Distinct from omitting the field, which means unclassified.

PHYSICAL_GOOD

A tangible item delivered to the buyer.

SERVICE

Work performed for the buyer, such as a booking or consultation.
Example
"DIGITAL_GOOD"

QuoteBasis

Description

Read-only snapshot of the physical inputs (parcels, destination) the selected rate was priced for. Server-written; compared against the live shipment to detect it changed out from under its rate.

Fields
Field Name Description
destination - QuoteBasisDestination
parcelCount - Int
parcels - [QuoteBasisParcel]
quotedAt - DateTime When the basis was captured (rate quote/selection time)
Example
{
  "destination": QuoteBasisDestination,
  "parcelCount": 987,
  "parcels": [QuoteBasisParcel],
  "quotedAt": "2007-12-03T10:15:30Z"
}

QuoteBasisDestination

Description

The typed destination the rate was priced for

Fields
Field Name Description
country - String
countryCode - String
postcode - String
settlement - String The normalised city, recorded only when the rate's zone resolution was settlement-keyed (a postcode some area lists by settlement); empty when none was typed. A label checks it only when it is recorded.
Example
{
  "country": "abc123",
  "countryCode": "xyz789",
  "postcode": "abc123",
  "settlement": "abc123"
}

QuoteBasisDimensions

Description

Parcel dimensions the rate was priced for (cm)

Fields
Field Name Description
height - Float
length - Float
width - Float
Example
{"height": 123.45, "length": 987.65, "width": 987.65}

QuoteBasisParcel

Description

Per-parcel physical basis a rate was priced for

Fields
Field Name Description
billableWeight - Float Billable weight priced (kg)
dimensions - QuoteBasisDimensions
volumetricWeight - Float Volumetric weight priced (kg)
weight - Float Actual weight priced (kg)
Example
{
  "billableWeight": 123.45,
  "dimensions": QuoteBasisDimensions,
  "volumetricWeight": 123.45,
  "weight": 987.65
}

RateRefusal

Description

Why the request's options ruled out this carrier or one of its products. Beside the priced services when only some products are refused; alone on an unavailable rate when none priced.

Fields
Field Name Description
constraint - RateRefusalConstraint For CONSTRAINT: what failed.
option - String The catalogue option code refused; absent for a product constraint.
product - String The product refused; absent when the whole carrier is (the flag, a carrier whose quote takes no options).
reason - RateRefusalReason!
with - String The colliding, conflicting, required or missing code; the payment method for REQUIRES_PAYMENT_METHOD and COD_NOT_OFFERED.
Example
{
  "constraint": RateRefusalConstraint,
  "option": "xyz789",
  "product": "abc123",
  "reason": "UNKNOWN_OPTION",
  "with": "xyz789"
}

RateRefusalConstraint

Fields
Field Name Description
fact - String! The fact checked, printed (shipment 3 kg).
kind - CarrierConstraintKind!
limit - String! The bound that failed, printed (max 2 kg).
Example
{
  "fact": "abc123",
  "kind": "WEIGHT",
  "limit": "xyz789"
}

RateRefusalReason

Description

UNKNOWN_OPTION: not in the carrier's catalogue. NOT_REQUESTABLE: derived from the order, never asked for. NOT_FOR_PRODUCT: the option does not apply to this product. REQUIRES_PAYMENT_METHOD: the option is a variant of a payment method the order does not use. EXCLUSIVE_GROUP: two options of one group. CONFLICTS_WITH: a declared conflict. REQUIRES_MISSING: a required option or product is absent. CONSTRAINT: a weight, destination or delivery-day bound failed. UNPRICED: the eshop's tariff has no charge for the option. NOT_DELIVERABLE: this carrier's quote takes no options. OPTIONS_NOT_ENABLED: the eshop has not switched options on for this carrier. COD_NOT_OFFERED: a cash-on-delivery order to a carrier that does not collect.

Values
Enum Value Description

UNKNOWN_OPTION

NOT_REQUESTABLE

NOT_FOR_PRODUCT

REQUIRES_PAYMENT_METHOD

EXCLUSIVE_GROUP

CONFLICTS_WITH

REQUIRES_MISSING

CONSTRAINT

UNPRICED

NOT_DELIVERABLE

OPTIONS_NOT_ENABLED

COD_NOT_OFFERED

Example
"UNKNOWN_OPTION"

RateSortingEnum

Values
Enum Value Description

FASTEST

Lowest transit time first; carriers without transit-time data are listed last

PRICE_ASC

Cheapest first

PRICE_DESC

Most expensive first
Example
"FASTEST"

RateStoreFreeShipping

Description

The store's own free shipping on one rate.

Fields
Field Name Description
applied - Boolean! True when the store's grant priced this rate; false when a Pircel free-shipping rule took precedence (Shipment.freeShipping).
codFeeWaived - Boolean! True when the rate's own cash-on-delivery fee was dropped and the merchant absorbs it: under WAIVE, or under CHARGE on a rate whose basis is UNKNOWN, where the fee cannot be split out. False when the buyer pays it or there was none.
Example
{"applied": true, "codFeeWaived": false}

Recipient

Description

Recipient details including address and contact information.

Fields
Field Name Description
address - Address Address details.
contact - Contact Contact details.
Example
{
  "address": Address,
  "contact": Contact
}

RecipientAddressCreateInput

Description

Input type for recipient address used for shipment creation.

Fields
Input Field Description
addressLine1 - String Address line 1.
addressLine2 - String Address line 2.
addressLine3 - String Address line 3.
city - String! City. A quote (a NEW shipment with no orderId) may send it blank and is priced from the postcode; a placed order needs it, else shipmentInput.required with extensions.field recipient.address.city.
country - String! Country.
countryCode - String Country code in ISO 3166-1 alpha-2 format.
county - String County.
postcode - String Postcode.
Example
{
  "addressLine1": "abc123",
  "addressLine2": "xyz789",
  "addressLine3": "abc123",
  "city": "abc123",
  "country": "abc123",
  "countryCode": "abc123",
  "county": "abc123",
  "postcode": "abc123"
}

RecipientContactCreateInput

Description

Input type for recipient contact used for shipment creation.

Fields
Input Field Description
companyName - String Company name. Either company name OR first and last name is required.
email - String Email address.
firstname - String First name. Either first and last name OR company name is required.
lastname - String Last name. Either first and last name OR company name is required.
phone - String Phone number.
Example
{
  "companyName": "xyz789",
  "email": "xyz789",
  "firstname": "abc123",
  "lastname": "xyz789",
  "phone": "abc123"
}

RecipientCreateInput

Description

Input type for recipient details used for shipment creation.

Fields
Input Field Description
address - RecipientAddressCreateInput Recipient address. Required, else shipmentInput.required with extensions.field recipient.address, unless the selected rate is IN_STORE (a counter sale), where it may be omitted and one sent is stored as given. On a quote (a NEW shipment with no orderId and no completed checkout) only city, postcode, county, country and countryCode are read; the street lines are ignored and not stored.
contact - RecipientContactCreateInput Recipient contact. Required, else shipmentInput.required with extensions.field recipient.contact, unless the selected rate is IN_STORE. On a quote it is ignored: names, company, phone and email are not stored, so restate them when the order is placed.
Example
{
  "address": RecipientAddressCreateInput,
  "contact": RecipientContactCreateInput
}

RecipientLogistics

Description

Customer-provided logistics company details when using recipient-logistics delivery option.

Fields
Field Name Description
companyName - String! Name of the logistics company.
email - String Contact email for the logistics company (optional).
phone - String! Contact phone number for the logistics company.
Example
{
  "companyName": "abc123",
  "email": "abc123",
  "phone": "xyz789"
}

RecipientLogisticsInput

Description

Input for customer-provided logistics company details when using recipient-logistics.

Fields
Input Field Description
companyName - String! Name of the logistics company.
email - String Contact email for the logistics company (optional).
phone - String! Contact phone number for the logistics company.
Example
{
  "companyName": "xyz789",
  "email": "xyz789",
  "phone": "xyz789"
}

RequestableOption

Description

A catalogue option a storefront may offer for this eshop and carrier: requested by the buyer or merchant and priced by the eshop's tariff (a zero charge counts). The price depends on the destination; the quote states it.

Fields
Field Name Description
appliesToProducts - [String!] Absent = every product of the carrier.
code - String!
name - String!
paymentMethods - [ShipmentPaymentMethodEnum!]! The payment methods this option applies to, empty when it applies to any. An option that lists any is a way of paying, such as cash on delivery by cheque: it replaces that payment's own option and is quoted only with one of them, so it is not an add-on a storefront offers on its own.
Example
{
  "appliesToProducts": ["abc123"],
  "code": "xyz789",
  "name": "xyz789",
  "paymentMethods": ["AFTERPAY_CLEARPAY"]
}

RetentionHold

Description

An admin's hold on an eshop's records for an open tax audit or dispute: retention deletes none of them while it lasts.

Fields
Field Name Description
reason - String!
setAt - DateTime!
setBy - ObjectID! The admin who set it.
Example
{
  "reason": "xyz789",
  "setAt": "2007-12-03T10:15:30Z",
  "setBy": "5e5677d71bdc2ae76344968c"
}

Rule

Fields
Field Name Description
exclusions - RuleExclusions Optional product exclusion criteria. Products matching any criterion are skipped during rule evaluation.
type - String
value - Float
Example
{
  "exclusions": RuleExclusions,
  "type": "xyz789",
  "value": 987.65
}

RuleExclusions

Fields
Field Name Description
categories - [String] Product categories excluded from this rule evaluation
extraAttributes - [String] Product extra attributes excluded from this rule evaluation
skus - [String] Product SKUs excluded from this rule evaluation
Example
{
  "categories": ["abc123"],
  "extraAttributes": ["xyz789"],
  "skus": ["abc123"]
}

SelectedRate

Description

The selected service and rate for a shipment

Fields
Field Name Description
costs - Costs Cost breakdown for the selected service (may include client-specific overrides)
deliveryCompany - DeliveryCompany Selected delivery company. Null for external/pickup rates.
fulfillmentType - FulfillmentType How this rate is fulfilled (carrier|external|pickup). Defaults to carrier for legacy rates.
negotiatedCosts - Costs Original costs based on carrier negotiated rates (before any client-specific overrides). Used for invoice reconciliation to compare against carrier invoices. Absent when no carrier agreement is known (plugin-provided rates, unconfirmed carriers, legacy shipments) — this field never falls back to costs.
negotiatedPriceComponents - [PricingComponent] Itemised breakdown of the carrier-agreement cost on negotiatedCosts' own ex-VAT basis — the counterpart of priceComponents for the negotiated leg. Absent where the rate source does not itemise it; absence means the agreed per-service split is unknown, not zero.
priceComponents - [PricingComponent] The producer’s own itemisation for the selected service, stage-mixed by construction: file-based rates carry pre-multiplier net legs beside a final-gross VAT line, while API carriers carry the carrier’s figures rather than the buyer’s. It does NOT sum to finalPriceCents and is not a decomposition of it — the multiplier, the minimum-price floor and the rounding increment all land afterwards and appear in no component. Read one component; never reconcile the sum.
pricingTrace - PricingTrace What the selected service was priced from, copied from the service at selection. Absent on a client-supplied rate and on quotes before the stamp existed.
quoteBasis - QuoteBasis Physical inputs (parcels/destination) this rate was priced for. Server-written; absent for legacy/non-carrier rates.
rating - Float Rating of the selected service
serviceCode - String Selected service code. Null on a carrier selection that names no service: the carrier cannot fetch rates, and the merchant priced the selection.
serviceName - String Selected service name
transitTime - TransitTime Delivery time information
Example
{
  "costs": Costs,
  "deliveryCompany": DeliveryCompany,
  "fulfillmentType": "CARRIER",
  "negotiatedCosts": Costs,
  "negotiatedPriceComponents": [PricingComponent],
  "priceComponents": [PricingComponent],
  "pricingTrace": PricingTrace,
  "quoteBasis": QuoteBasis,
  "rating": 987.65,
  "serviceCode": "abc123",
  "serviceName": "xyz789",
  "transitTime": TransitTime
}

SelectedRateInput

Description

Input for selecting a shipping rate. Can reference available rates (by serviceCode) or provide complete rate data directly

Fields
Input Field Description
costs - CostsInput Optional cost breakdown. If not provided, will be fetched from available rates based on serviceCode
deliveryCompany - DeliveryCompanyIDOrSlugInput The carrier providing the service (by ID or slug). Required when fulfillmentType is carrier (the default); omit it for every other type.
fulfillmentType - FulfillmentType How this rate is fulfilled. Defaults to carrier when omitted. Use external for an unmappable courier, pickup for collect-from-store, or in-store for a counter sale (addShipment only, placed, costs.finalPrice 0 or omitted, serviceName the shop); none of them names a deliveryCompany.
priceComponents - [PricingComponentInput] Optional detailed breakdown of price components. If not provided, will be fetched from available rates based on serviceCode. Stored as provenance only: the server never sums these to derive or check costs.finalPrice, so a set that does not add up to the price is recorded, not rejected.
serviceCode - String The service to select from the available rates. A carrier that quotes needs it, or serviceId; a carrier that cannot fetch rates has no services, so omit it and send costs. For external/pickup use serviceName for the display label.
serviceId - String Exact-reference selection: the Service.id of the quote to select from this shipment's rates (must belong to the named carrier). When it resolves, the server-held quote is used verbatim and any client-sent costs are ignored; when absent or unresolvable, selection falls back to serviceCode.
serviceName - String Optional service name. If not provided, will use serviceCode or fetch from available rates
transitTime - TransitTimeInput Optional delivery time information. If not provided, will be fetched from available rates based on serviceCode
Example
{
  "costs": CostsInput,
  "deliveryCompany": DeliveryCompanyIDOrSlugInput,
  "fulfillmentType": "CARRIER",
  "priceComponents": [PricingComponentInput],
  "serviceCode": "xyz789",
  "serviceId": "xyz789",
  "serviceName": "xyz789",
  "transitTime": TransitTimeInput
}

Service

Description

A carrier service option with pricing details

Fields
Field Name Description
costs - Costs Cost breakdown for this service
id - String Stable identifier of this rate object within its shipment. Send it back as selectedRate.serviceId to select this exact quote.
priceComponents - [PricingComponent] The producer’s own itemisation, stage-mixed by construction: file-based rates carry pre-multiplier net legs beside a final-gross VAT line, while API carriers carry the carrier’s figures rather than the buyer’s. It does NOT sum to finalPriceCents and is not a decomposition of it — the multiplier, the minimum-price floor and the rounding increment all land afterwards and appear in no component. Read one component; never reconcile the sum.
pricingTrace - PricingTrace What this service was priced from: the rate card and its version, the zone resolution, the itemised ex-VAT legs, the config and VAT in force, the weight and the instant. Absent on a client-supplied rate.
serviceCode - String Carrier-specific service code (e.g. FEDEX_GROUND, UPS_NEXT_DAY_AIR)
serviceName - String Human-readable service name
transitTime - TransitTime Delivery time information
Example
{
  "costs": Costs,
  "id": "xyz789",
  "priceComponents": [PricingComponent],
  "pricingTrace": PricingTrace,
  "serviceCode": "abc123",
  "serviceName": "abc123",
  "transitTime": TransitTime
}

Shipment

Fields
Field Name Description
_id - ObjectID Shipment's id.
auditLog - [ShipmentAuditEntry!] Append-only activity log of everything done to this shipment after it left "new" status, newest first.
availableRates - [DeliveryRate] Available delivery rates from all carriers with their services
buyerNotes - String Buyer's notes.
charge - ShipmentCharges The delivery charge this shipment bound, as the ledger records it: buyer is what the buyer was bound to pay for delivery, carrier what Pircel expects the carrier to bill. Read this for a finalized shipment’s charge; selectedRate.costs is the quote as selected and can differ from it (free shipping, an override, an admin repricing, a re-rate after checkout). Null until the shipment binds and on shipments the backfill has not reached.
checkout - ShipmentCheckout How and where the customer placed the order (checkout flow, express flag, entry-point page). Set by the storefront plugin at order creation; null for manually-created or pre-tracking shipments.
checkoutCompletedAt - DateTime The date and time when the shipment completed checkout. Null for manually-created shipments.
codCollectible - CodCollectible! What the courier would collect at the door if the label were minted now, with the provenance of that figure. Null is impossible — an unresolvable collectible reports UNRESOLVABLE rather than 0. Once a label exists, codDeclaration is what it actually says.
codDeclaration - CodDeclaration What the carrier was told to collect, frozen at label creation and cleared on cancellation. Compare against codCollectible to detect an order edited after its label was printed — the courier will still ask for this amount.
collectedAt - DateTime When the buyer was handed the order at the store: a counter sale is collected when it is booked. Null until the status reaches collected.
costSummary - CostSummary Pircel's own catalog+quote view of the order. See CostSummary — it is not the buyer's money.
createdAt - DateTime The date and time when the shipment was created.
documentUpload - DocumentUploadEligibility! Whether this shipment can take a document upload, and why not when it cannot. Answered by the same predicate the upload endpoint uses, so a rendered control and an accepted upload cannot disagree. reason is the error code the endpoint would return.
effectiveDate - DateTime The shipment date used for sorting/filtering: checkoutCompletedAt, falling back to createdAt for shipments that never completed checkout. Derived field — safe for client-side sorting.
eshop - Eshop Reference to the eshop that created this shipment.
freeShipping - ShipmentFreeShipping Free shipping tracking information when a free shipping promotion was applied to this shipment
freeShippingDecision - FreeShippingDecision Pircel's free-shipping decision as last settled, applied or not; freeShipping keeps the applied snapshot. Frozen once the buyer charge binds; null on shipments settled before it was recorded.
geniki - GenikiFields Geniki delivery company specific fields
holds - [ShipmentHold!]! Reasons not to fulfil the shipment yet; empty when it is not held. A held shipment is refused a label and a pickup list and can still be canceled.
isB2BInvoice - Boolean Indicates if the shipment is for a B2B invoice (true) or B2C invoice (false). False by default.
notificationsSent - [NotificationSent] Array tracking which email notifications have been sent for this shipment.
orderAmounts - OrderAmounts The order totals as the seller stated them, ingested verbatim. Absent on shipments created before the amounts-first contract, and on any order whose originator sent none.
orderId - String The unique order id
otherDocuments - [OtherDocument] Additional documents related to the shipment, like invoices.
parcels - [Parcel] List of parcels in this shipment, each with their own dimensions, weights, and product distribution.
paymentMethod - ShipmentPaymentMethodEnum Customer's payment method.
pickupAddress - PickupAddress The address where the package should be picked up from.
pickupDate - Date Date "YYYY-MM-DD" that the delivery company should receive the package from the shop. Defaults to today
pricingEtag - String What Eshop.pricingEtag was when availableRates were quoted. An opaque entity tag (RFC 9110): compare two values for equality only; never parse or order them. It changes only when the rates are quoted again, so a replayed request returns the value of the original quote. Null when the shipment was never quoted, was quoted before this field existed, or its rates were priced from two different sets of inputs.
products - [Product] List of products in the shipment.
productsQuantity - Int The units that ship: Σ quantity of the lines whose requiresShipping is not false. Derived by the server from the lines; 0 when nothing ships.
recipient - Recipient! Recipient details including address and contact information. Empty on a counter sale (an IN_STORE rate) with no customer.
recipientLogistics - RecipientLogistics Customer-provided logistics company details when using recipient-logistics delivery option.
replacedBy - ShipmentLink The shipment booked for the edited order that replaces this one; null otherwise.
replaces - ShipmentLink The shipment this one replaces: an edited order is booked as a new shipment naming the original (replacesShipment). Null otherwise.
requestedOptions - [String!] Catalogue option codes the buyer or merchant asked for (saturday-delivery, cod-cheque). Evaluated against each carrier’s catalogue at quote; a carrier that cannot honour one is refused with a reason on its rate, never quoted without it.
requiresShipping - Boolean Whether any part of this order is shipped. Resolved by the server from the order lines, or from the value the integration supplied. When false, no rates were requested and costSummary.deliveryCostCents is zero.
returnShipmentVoucher - ShipmentVoucher Shipment-level RETURN voucher (master tracking number for the reverse-logistics shipment) for carriers that issue one. Independent lifecycle from shipmentVoucher.
selectedRate - SelectedRate The selected service and rate for this shipment: the quote as selected. Once the shipment binds, costs.charge, deliveryCharge and codFee publish what the buyer was bound to (charge.buyer), not the quote’s derivation: each TaxedMoney whole, its statedCents the bound amount on the record’s basis at the record’s rate. finalPriceCents, vatBasis, vatRate and the itemisation stay the quote’s, and an admin repricing is charge.buyer (source RATE_PRICING_PATCH, its itemisation in patch.components). negotiatedCosts is served from charge.carrier, which the selection does not store.
senderNotes - String Sender's notes.
shipmentPurpose - ShipmentPurposeEnum The purpose of the shipment.
shipmentVoucher - ShipmentVoucher Shipment-level FORWARD voucher (master tracking number) for carriers that issue one. Null for carriers that only return per-piece vouchers. Use this as the canonical handle for shipment-level operations (tracking polling, pickup creation, cascade cancellation). The reverse-logistics counterpart lives on returnShipmentVoucher.
shipper - Shipper Shipper details including address and contact information.
shippingRegionType - ShippingRegionTypeEnum The type of shipping region.
status - ShipmentStatusEnum Transction's status.
storeConnection - StoreConnection The connection storeConnectionId names, as the eshop holds it now: its platform, store domain and status, DISCONNECTED or RETIRED once it has ended. Null when the shipment records none, when the connection was deleted by a disconnect before connections were kept, or, for a store connection's key, when it is not the key's own connection.
storeConnectionId - ObjectID The store connection (StoreConnection._id) that created this shipment or bound its order. Order ids are unique per connection; null means none was stated (the dashboard, a CSV import, a caller that sends no connection, and every shipment from before connections were recorded), and those shipments share one scope per eshop. Set once and never changed; kept after the connection is disconnected. A shipment learned any way other than your own response is yours only when this equals your connection id; null proves nothing.
storeFreeShipping - ShipmentStoreFreeShipping The store's own free shipping as the rate request stated it; null when the shipment has no grant.
storeManagedFields - [StoreManagedFieldEnum!]! The fields the store owns on this shipment. Empty unless the server applies syncs, the shipment's store connection declares ORDER_SYNC, and the store has synced this shipment: from its first accepted syncStoreOrder (storeSync.appliedSourceVersion set), not from its booking. A non-operator edit that changes one is refused with updateShipment.fieldManagedByStore; an echo of the stored value passes.
storeShipments - [StoreShipment!]! Shipments the merchant made in the store rather than through Pircel, as the store reported them. Recorded only.
storeSync - ShipmentStoreSync Where this shipment stands with its store: the order state the store last applied with syncStoreOrder, and the outbound version the store pulls from storeShipmentChanges with its acknowledgement. Null until the store has synced the order or something about the shipment has changed for its store connection.
syncIssues - [ShipmentSyncIssue!]! Disagreements between the store's order and the shipment that a sync did not settle, open and resolved, oldest first.
synthetic - ShipmentSynthetic Set when the synthetic shopper created this shipment; null for real orders.
trackingDetails - TrackingDetails Tracking details for the shipment.
unassociatedVouchers - [UnassociatedVoucher!] Vouchers returned by the carrier that the adapter could not confidently associate with a specific parcel. Should be empty for healthy shipments; a non-empty list indicates an adapter mapping problem worth auditing.
unavailableRates - [DeliveryRate] Carriers that could not price this destination (errored or returned no service). Kept separate from availableRates so clients never treat them as selectable or as a €0 option.
vatDetails - VatDetails VAT preferences and information for this shipment.
viewerCanOverrideStoreManagedFields - Boolean! Whether the requester may change the fields in storeManagedFields: true for an operator. The override is audited, and the store's next change to the field replaces it.
viewerEditableStoreManagedFields - [StoreManagedFieldEnum!]! The fields in storeManagedFields the requester may change now, each change listed for the store to write back: every one for an operator; for anyone else, on a connection that declares WRITES_BACK_PIRCEL_EDITS, the recipient's (RECIPIENT_ADDRESS, RECIPIENT_NAME_PHONE, RECIPIENT_EMAIL) unless an open EDIT_CONFLICT holds it. Empty otherwise.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "auditLog": [ShipmentAuditEntry],
  "availableRates": [DeliveryRate],
  "buyerNotes": "xyz789",
  "charge": ShipmentCharges,
  "checkout": ShipmentCheckout,
  "checkoutCompletedAt": "2007-12-03T10:15:30Z",
  "codCollectible": CodCollectible,
  "codDeclaration": CodDeclaration,
  "collectedAt": "2007-12-03T10:15:30Z",
  "costSummary": CostSummary,
  "createdAt": "2007-12-03T10:15:30Z",
  "documentUpload": DocumentUploadEligibility,
  "effectiveDate": "2007-12-03T10:15:30Z",
  "eshop": Eshop,
  "freeShipping": ShipmentFreeShipping,
  "freeShippingDecision": FreeShippingDecision,
  "geniki": GenikiFields,
  "holds": [ShipmentHold],
  "isB2BInvoice": true,
  "notificationsSent": [NotificationSent],
  "orderAmounts": OrderAmounts,
  "orderId": "abc123",
  "otherDocuments": [OtherDocument],
  "parcels": [Parcel],
  "paymentMethod": "AFTERPAY_CLEARPAY",
  "pickupAddress": PickupAddress,
  "pickupDate": "2007-12-03",
  "pricingEtag": "abc123",
  "products": [Product],
  "productsQuantity": 987,
  "recipient": Recipient,
  "recipientLogistics": RecipientLogistics,
  "replacedBy": ShipmentLink,
  "replaces": ShipmentLink,
  "requestedOptions": ["abc123"],
  "requiresShipping": true,
  "returnShipmentVoucher": ShipmentVoucher,
  "selectedRate": SelectedRate,
  "senderNotes": "xyz789",
  "shipmentPurpose": "GIFT",
  "shipmentVoucher": ShipmentVoucher,
  "shipper": Shipper,
  "shippingRegionType": "DOMESTIC",
  "status": "BOOKING_UNRESOLVED",
  "storeConnection": StoreConnection,
  "storeConnectionId": "5e5677d71bdc2ae76344968c",
  "storeFreeShipping": ShipmentStoreFreeShipping,
  "storeManagedFields": ["CANCELLATION"],
  "storeShipments": [StoreShipment],
  "storeSync": ShipmentStoreSync,
  "syncIssues": [ShipmentSyncIssue],
  "synthetic": ShipmentSynthetic,
  "trackingDetails": TrackingDetails,
  "unassociatedVouchers": [UnassociatedVoucher],
  "unavailableRates": [DeliveryRate],
  "vatDetails": VatDetails,
  "viewerCanOverrideStoreManagedFields": false,
  "viewerEditableStoreManagedFields": ["CANCELLATION"]
}

ShipmentAuditChange

Fields
Field Name Description
from - JSON Value before the change (null when the field was unset). Enum values are their GraphQL enum names, as Shipment returns the field at path, whatever spelling the entry was stored with; values of fields without an enum are as recorded.
path - String! Dot path of the changed field
to - JSON Value after the change (null when the field was cleared). Enum values are their GraphQL enum names, as Shipment returns the field at path, whatever spelling the entry was stored with; values of fields without an enum are as recorded.
Example
{"from": {}, "path": "xyz789", "to": {}}

ShipmentAuditEntry

Fields
Field Name Description
_id - ID!
actor - User The user who performed the action. Null for api-key and system actors, and for an ADMIN actor unless an admin reads the entry: everyone else reads actorType: ADMIN only.
actorType - AuditActorTypeEnum! Which kind of caller performed the action
changes - [ShipmentAuditChange!] Per-field before/after values for field-edit events (empty otherwise). Enum values in from and to are GraphQL enum names: the STORE_* events record them that way, and older events are mapped on read.
createdAt - DateTime! When the action was performed
event - ShipmentAuditEventEnum! The kind of change this entry records
metadata - JSON Free-form event context (e.g. created/canceled voucher codes), returned as recorded, except that what an operator typed or chose (reason and to on STATUS_FORCED) is returned to admins only. Enum values recorded here are GraphQL enum names, e.g. hold reasons on the STORE_HOLD_* and PIRCEL_HOLD_* events, and an issue's kind, field, severity and resolution on the SYNC_ISSUE_* events.
store - ShipmentAuditStoreOrigin The store the change came from: set whenever the store's own API key made the request (syncStoreOrder, the booking, cancelShipment, a label), naming the shipment's store connection; null when a person or Pircel made it, and on a shipment with no store connection.
summary - String Short human-readable description of the event
Example
{
  "_id": "4",
  "actor": User,
  "actorType": "ADMIN",
  "changes": [ShipmentAuditChange],
  "createdAt": "2007-12-03T10:15:30Z",
  "event": "ADDRESS_CHANGED",
  "metadata": {},
  "store": ShipmentAuditStoreOrigin,
  "summary": "abc123"
}

ShipmentAuditEventEnum

Description

The kinds of events recorded in a shipment audit log entry. Field-edit events carry changes; the rest carry metadata.

Values
Enum Value Description

ADDRESS_CHANGED

The recipient shipping country changed during checkout (see changes)

CHECKOUT_COMPLETED

The shipment was finalized at checkout (carrier, service and delivery cost in metadata)

CONTENT_CHANGED

The products/parcels of an order-bound shipment changed (see changes) — surfaced because a bound order should not have its contents mutated

COST_OVERRIDDEN

A manual cost override was applied or changed

PICKUP_LIST_CREATED

The shipment was added to a carrier pickup list

PIRCEL_HOLD_PLACED

Pircel held the shipment for an issue it opened (metadata.reasons: SYNC_ISSUE or REPLACES_SHIPPED_ORDER). store names the store when its request caused it.

PIRCEL_HOLD_RELEASED

Pircel released its hold because the issue behind it closed, or because the shipment closed (metadata.releasedOn, the status it closed on) (metadata.reasons). store names the store when its request caused it.

RATE_PRICING_MODIFIED

Individual selected-rate price components were overridden (modifyShipmentRatePricing)

RATE_SELECTED

The selected delivery company / service rate changed

SHIPMENT_CANCELED

The shipment was canceled

SHIPMENT_UPDATED

One or more editable shipment fields changed (see changes)

SHIPPER_DEFAULTED

The order was placed without a shipper, so the eshop's default address-book entry became it (changes: shipper.addressBookEntry).

STATUS_FORCED

An operator set the status outside the transition table (metadata: from and to, the statuses as ShipmentStatusEnum names, and reason; to and reason are returned to admins only).

STORE_ADDRESS_CHANGED

The store changed the recipient address (changes; store names the store).

STORE_AMOUNTS_CHANGED

The store changed the order money or the payment method (changes; store names the store).

STORE_CONTACT_CHANGED

The store changed the recipient's name, company, phone or email (changes; store names the store).

STORE_CONTENTS_CHANGED

The store changed the lines still to ship (changes; store names the store).

STORE_HOLD_PLACED

The store held the order (metadata.reasons; store names the store).

STORE_HOLD_RELEASED

The store released a hold, or the hold was released because the shipment closed (metadata.releasedOn, the status it closed on) (metadata.reasons; store names the store).

SYNC_ISSUE_OPENED

A sync issue was opened (metadata: issueId, kind, field, severity).

SYNC_ISSUE_RESOLVED

A sync issue was closed (metadata: issueId, kind, field, resolution).

VOUCHER_CANCELED

The shipment / parcel vouchers were canceled (metadata.canceledCodes). By SYSTEM, with metadata.requestedBy naming the mutation, when the carrier voided them for a call whose own move could not land.

VOUCHER_CREATED

A voucher / label was created for the shipment
Example
"ADDRESS_CHANGED"

ShipmentAuditStoreOrigin

Description

The store a change came from.

Fields
Field Name Description
platform - Platform The store's platform.
sourceVersion - Int The store's sourceVersion that carried the change; null when no syncStoreOrder carried it (a booking, a cancel, a label).
storeConnectionId - ObjectID! The store connection.
Example
{
  "platform": "MAGENTO2",
  "sourceVersion": 987,
  "storeConnectionId": "5e5677d71bdc2ae76344968c"
}

ShipmentCharge

Description

One binding of one leg of a shipment’s delivery charge. Append-only: a change is a new record with the next sequence that supersedes the current one, whose amountCents is what it replaced. Integer cents on a stated basis; netCents/taxCents/grossCents are null when the basis is unknown, never guessed.

Fields
Field Name Description
amountCents - Int! The bound figure, integer cents, on basis.
basis - VatBasis!
carrierProfile - ChargeCarrierProfile
contentHash - String!
createdAt - DateTime
currencyCode - CurrencyCode!
event - ChargeEvent!
freeShipping - ChargeFreeShipping
grossCents - Int
id - ObjectID!
leg - ChargeLegEnum!
legacy - ChargeLegacy
lines - [ChargeLine!]
netCents - Int
order - ChargeOrder
override - ChargeOverride
patch - ChargePatch
platform - ChargePlatform
pricingTrace - PricingTrace
quote - ChargeQuote
schemaVersion - Int!
sequence - Int!
shipment - ObjectID!
source - ChargeSourceEnum!
storeFreeShipping - ChargeStoreFreeShipping Present when the store's own free shipping priced this buyer record; null otherwise.
supersededCharge - ShipmentCharge The record this one replaced, so a CANCELLED record shows what it reversed without a second query; null on the first.
supersedes - ObjectID The record this one replaced; null on the first.
taxCents - Int
vat - ChargeVat
Example
{
  "amountCents": 987,
  "basis": "EX_VAT",
  "carrierProfile": ChargeCarrierProfile,
  "contentHash": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "currencyCode": "EUR",
  "event": ChargeEvent,
  "freeShipping": ChargeFreeShipping,
  "grossCents": 123,
  "id": "5e5677d71bdc2ae76344968c",
  "leg": "BUYER",
  "legacy": ChargeLegacy,
  "lines": [ChargeLine],
  "netCents": 987,
  "order": ChargeOrder,
  "override": ChargeOverride,
  "patch": ChargePatch,
  "platform": ChargePlatform,
  "pricingTrace": PricingTrace,
  "quote": ChargeQuote,
  "schemaVersion": 987,
  "sequence": 987,
  "shipment": "5e5677d71bdc2ae76344968c",
  "source": "CANCELLED",
  "storeFreeShipping": ChargeStoreFreeShipping,
  "supersededCharge": ShipmentCharge,
  "supersedes": "5e5677d71bdc2ae76344968c",
  "taxCents": 123,
  "vat": ChargeVat
}

ShipmentCharges

Description

The current charge records of a shipment: buyer, what the buyer was bound to pay for delivery; carrier, what Pircel expects the carrier to bill. Absent until the shipment binds (checkout completes, an override, a no-delivery) and on shipments the backfill has not reached.

Fields
Field Name Description
buyer - ShipmentCharge
carrier - ShipmentCharge
Example
{
  "buyer": ShipmentCharge,
  "carrier": ShipmentCharge
}

ShipmentCheckout

Description

How and where the customer placed the order: checkout flow/architecture, whether it was an express (accelerated) checkout, and the page it started from. Independent of paymentMethod (how they paid) and source (customer-checkout vs merchant-created).

Fields
Field Name Description
entryPoint - ShipmentCheckoutEntryPointEnum Storefront page the order was initiated from.
flow - ShipmentCheckoutFlowEnum Storefront checkout flow / architecture the order came through.
isExpress - Boolean Whether the order used an express / accelerated one-tap wallet checkout (e.g. Apple Pay, Google Pay) that bypasses the standard form. Correlate with paymentMethod to identify the specific wallet.
Example
{"entryPoint": "CART", "flow": "BLOCK", "isExpress": false}

ShipmentCheckoutEntryPointEnum

Description

The storefront page from which the order was initiated. Most meaningful for express checkouts, which can start outside the checkout page.

Values
Enum Value Description

CART

Initiated from the cart page.

CHECKOUT

Initiated from the checkout page (the default for the standard, non-express flow).

MINI_CART

Initiated from the mini-cart / cart drawer.

PRODUCT

Initiated from a product page (e.g. an express button that skips the cart).
Example
"CART"

ShipmentCheckoutFlowEnum

Description

The storefront checkout flow / architecture an order came through. Platform-agnostic: each platform maps its surfaces onto these buckets.

Values
Enum Value Description

BLOCK

Modern native block / component checkout rendered by the platform (WooCommerce Cart & Checkout Blocks, backed by the Store API; Shopify's checkout with its UI extensions).

CLASSIC

Legacy server-rendered native checkout (WooCommerce [woocommerce_checkout] shortcode, Magento Luma one-page).

HEADLESS

Custom / headless frontend that creates the order programmatically through the platform commerce API (WooCommerce Store API, Shopify Storefront/Cart API, Magento PWA GraphQL).
Example
"BLOCK"

ShipmentCheckoutInput

Description

Checkout provenance for the order: flow/architecture, express flag, and entry-point page. Set by the storefront plugin at order creation.

Fields
Input Field Description
entryPoint - ShipmentCheckoutEntryPointEnum Storefront page the order was initiated from.
flow - ShipmentCheckoutFlowEnum Storefront checkout flow / architecture the order came through.
isExpress - Boolean Whether the order used an express / accelerated one-tap wallet checkout that bypasses the standard form.
Example
{"entryPoint": "CART", "flow": "BLOCK", "isExpress": true}

ShipmentFreeShipping

Description

Free shipping tracking information when a free shipping promotion was applied to a shipment

Fields
Field Name Description
applied - Boolean! Whether free shipping was applied to this shipment
appliedRegionSource - AppliedRegionSourceEnum Whether the applied free shipping came from a named rule or the rest-of-world fallback
appliedRuleId - ObjectID Stable reference to the matched rule subdocument; absent when the rest-of-world fallback was used
appliedRuleName - String Snapshot of the matched rule name (denormalized so historical shipments survive renames or deletions)
checkoutDisplay - FreeShippingCheckoutDisplayEnum Snapshot of the checkout display mode when free shipping was applied
codFeeCharged - Float COD fee the buyer pays when free shipping is applied and they choose cash on delivery (0 if not COD, or waived), on the order's basis: the configured fee as entered on a VAT-inclusive order, its net at the order's rate on a net-priced one. It REPLACES the delivery charge under free shipping rather than adding to it. Read its basis from vatDetails.valueAddedTaxIncluded, never from the eshop or a rate's vatBasis; Costs.codSurchargeCents is always net, so never add the two.
defaultCarrier - DeliveryCompany The eshop default carrier used for free shipping, populated from the DB to reflect current carrier state
discountAmount - Float Amount discounted from the delivery cost (originalCost - codFeeCharged for full free shipping)
originalCost - Float The shipping cost that would have been charged without free shipping, used for analytics and invoicing
originalCostUnknownReason - FreeShippingOriginalCostUnknownReasonEnum Why originalCost and discountAmount are absent: the saving is unknowable and is recorded as unknown, never as a number
reason - String Human-readable explanation of why free shipping was applied
threshold - Float The free shipping threshold at the time this shipment was created
Example
{
  "applied": false,
  "appliedRegionSource": "REST_OF_WORLD",
  "appliedRuleId": "5e5677d71bdc2ae76344968c",
  "appliedRuleName": "abc123",
  "checkoutDisplay": "ALL_CARRIERS",
  "codFeeCharged": 987.65,
  "defaultCarrier": DeliveryCompany,
  "discountAmount": 123.45,
  "originalCost": 123.45,
  "originalCostUnknownReason": "NO_RATE_QUOTED",
  "reason": "xyz789",
  "threshold": 123.45
}

ShipmentHold

Description

A reason not to fulfil the shipment yet. A held shipment is refused a label (createVoucher.shipmentOnHold) and a pickup list (createPickupList.shipmentOnHold); it can still be canceled, and its status is untouched.

Fields
Field Name Description
note - String The holder's own words, such as the store's status label; null when none was given.
reason - ShipmentHoldReasonEnum! Why the shipment is held.
since - DateTime! When Pircel first saw this hold. Set by the server and kept while the same source and reason persist.
source - ShipmentHoldSourceEnum! Who placed it. STORE holds are released only by the store; PIRCEL holds only by resolving their sync issue.
Example
{
  "note": "xyz789",
  "reason": "AWAITING_PAYMENT",
  "since": "2007-12-03T10:15:30Z",
  "source": "PIRCEL"
}

ShipmentHoldReasonEnum

Description

Why a shipment is held. The store reasons are those of StoreHoldReasonEnum; SYNC_ISSUE and REPLACES_SHIPPED_ORDER are placed by Pircel.

Values
Enum Value Description

AWAITING_PAYMENT

The order waits for a payment the buyer has not completed (Magento state pending_payment).

MERCHANT_HOLD

The merchant put the order on hold (Magento state holded); note carries the store status label.

OTHER

Another reason the store has for not fulfilling yet; note says which.

PAYMENT_REVIEW

The payment is under review by the gateway or the merchant (Magento state payment_review).

SUSPECTED_FRAUD

The store flagged the order as suspected fraud (Magento status fraud, in any state).

REPLACES_SHIPPED_ORDER

This shipment books an edited order (replaces) and waits until the shipment it replaces is canceled, so one purchase cannot ship twice. Released when that shipment is canceled, or when a person resolves the REPLACES_SHIPPED_ORDER issue once it is ACTIONABLE.

SYNC_ISSUE

An open ADDRESS_INVALID or ADDRESS_NOT_SERVICEABLE sync issue. Released when the issue resolves.
Example
"AWAITING_PAYMENT"

ShipmentHoldSourceEnum

Description

Who placed a hold.

Values
Enum Value Description

PIRCEL

Pircel, for a condition it detected. Released only by resolving the sync issue behind it.

STORE

The store, through the booking or syncStoreOrder. Released only by the store.
Example
"PIRCEL"

ShipmentPaymentMethodEnum

Description

How the customer paid the eshop for the order. Only cash-on-delivery changes carrier behavior (cash is collected at delivery); for every other method the carrier collects nothing. Use the isCashOnDelivery helper rather than comparing values directly.

Values
Enum Value Description

AFTERPAY_CLEARPAY

Buy now, pay later via Afterpay (Clearpay in the EU/UK).

AMAZON_PAY

Prepaid via the Amazon Pay wallet.

APPLE_PAY

Prepaid via the Apple Pay wallet.

BANCONTACT

Prepaid via Bancontact (Belgium).

BANK_DEPOSIT

The customer will pay for the order by bank deposit.

CARD

The customer will pay for the order by card.

CASH

Cash paid in person at the store's till, settled at the sale (a counter sale). Not cash on delivery: nothing is collected at delivery. For that, use CASH_ON_DELIVERY.

CASH_ON_DELIVERY

The customer will pay for the order by cash on delivery.

GIFT_CARD

Prepaid using a gift card balance.

GOOGLE_PAY

Prepaid via the Google Pay wallet.

IDEAL

Prepaid via iDEAL bank transfer (Netherlands).

INSTALLMENTS

Card installments (e.g. δόσεις); settled as a prepaid card payment.

KLARNA

Buy now, pay later via Klarna.

NO_CHARGE

The customer will not be charged for the order.

OTHER

Any other method the platform names (e.g. check or money order, purchase order); never cash on delivery. The tender's own label is in orderAmounts.payments[].label.

PAYPAL

The customer will pay for the order by PayPal.

REVOLUT_PAY

Prepaid via the Revolut Pay wallet.

SEPA

Prepaid via SEPA credit transfer.

STORE_CREDIT

Prepaid using store credit / voucher balance.
Example
"AFTERPAY_CLEARPAY"

ShipmentPurposeEnum

Values
Enum Value Description

GIFT

OTHER

PERSONAL_EFFECTS

REPAIR

RETURN

SAMPLE

SOLD

Example
"GIFT"

ShipmentReplacementInput

Description

The shipment an edited order replaces: the original order's. Send shipmentId when known, else orderId, looked up in this booking's order scope.

Fields
Input Field Description
orderId - String The original order's id.
shipmentId - ObjectID The original order's shipment.
Example
{
  "orderId": "abc123",
  "shipmentId": "5e5677d71bdc2ae76344968c"
}

ShipmentSourceEnum

Values
Enum Value Description

CHECKOUT

Checkout process

MANUAL

Manual entry
Example
"CHECKOUT"

ShipmentStatusEnum

Values
Enum Value Description

BOOKING_UNRESOLVED

A label request whose outcome at the carrier is unknown, held for an operator to resolve. A label may exist; nothing is retried on its own.

CANCELED

When the shipment has been canceled.

CANCEL_REQUESTED

The label is being voided at the carrier. Leaves for VOUCHER_CANCELED or CANCELED when the carrier confirms, or back to its label when it refuses.

CHECKOUT_COMPLETE

When the customer has completed the checkout process.

COLLECTED

Handed over to the buyer at the store; closed. Set by the server on a placed counter sale (an IN_STORE rate), never named by a client; it can still be canceled with cancelShipment.

MANUALLY_CREATED

When the shipment has been manually created.

NEW

When the shipment is just created and the customer still edit the delivery form

NO_DELIVERY_REQUIRED

When nothing on the order is shipped, such as a download or a service. A placed order with no parcel: excluded from pickup lists and voucher queues while still counting towards revenue. It returns to CHECKOUT_COMPLETE when the order gains a line that ships, and it can be canceled.

PICKUP_LIST_CREATED

When a pickup list has been created for the shipment.

VOUCHER_CANCELED

When a voucher has been canceled for the shipment.

VOUCHER_CREATED

Step 1: The shipping label for the shipment has been created.

VOUCHER_REQUESTED

A label has been requested from the carrier and its answer is awaited. Leaves for VOUCHER_CREATED, or back to the status it was requested from.

CUSTOMS_CLEARANCE

Step 4 (Optional): The shipment is undergoing customs clearance.

DELIVERED

Step 6: The shipment has been successfully delivered.

DELIVERY_CANCELED

Exception: The delivery of the shipment has been canceled.

EXCEPTION

Exception: An exception occurred during shipment delivery.

IN_TRANSIT

Step 3: The shipment is currently in transit.

OUT_FOR_DELIVERY

Step 5: The shipment is out for delivery.

PICKED_UP

Step 2: The shipment has been picked up by the delivery company.

RETURNED

Exception: The shipment has been returned.
Example
"BOOKING_UNRESOLVED"

ShipmentStoreFreeShipping

Description

The store's own free shipping as the rate request stated it. How it priced each rate is Costs.storeFreeShipping.

Fields
Field Name Description
granted - Boolean! Whether the store gives free shipping for the whole shipment.
label - String The store's name for the grant, as sent.
Example
{"granted": true, "label": "xyz789"}

ShipmentStoreSync

Description

Where this shipment stands with its store. The inbound half is the order state the store last sent with syncStoreOrder; the outbound half counts the changes the store can see, which it pulls with storeShipmentChanges and acknowledges with acknowledgeStoreShipmentChanges.

Fields
Field Name Description
ackedVersion - Int The newest version the store acknowledged.
appliedSourceVersion - Int The highest syncStoreOrder sourceVersion applied to the shipment; null until the store first syncs the order.
changedAt - DateTime When version last moved. Null while nothing has changed for the store.
changedFields - [StoreManagedFieldEnum!]! The store's fields a change made in Pircel (a dashboard user or an operator) altered at a version above the newest one the store acknowledged APPLIED or SKIPPED, for the store to write back to its order. Empty when the store's copy is current. Leaves out a field an open EDIT_CONFLICT holds. A status change, a cancel included, is not listed: version and the status say it.
lastAckAt - DateTime When the store last acknowledged a version.
lastAckReason - String The store's reason with its acknowledgement of ackedVersion, when it acknowledged it FAILED or SKIPPED and said why; null otherwise.
lastChangeOrigin - StoreSyncChangeOriginEnum Who caused the change version last counted. Null while nothing has changed for the store.
lastError - String The store's reason with its acknowledgement of ackedVersion, when it failed.
lastInboundAt - DateTime When a syncStoreOrder was last applied to the shipment; null until the store first syncs the order.
state - StoreSyncStateEnum The store's acknowledgement of the current version: PENDING until it acknowledges that version, then its outcome. Null while nothing has changed for the store.
version - Int! The outbound version: incremented in the same write as every change the store can see (a label created or voided, a cancellation, a carrier status). A write the store made to its own order fields never moves it. 0 while nothing has changed for the store. The store applies a shipment only when this is greater than the last version it applied.
Example
{
  "ackedVersion": 123,
  "appliedSourceVersion": 987,
  "changedAt": "2007-12-03T10:15:30Z",
  "changedFields": ["CANCELLATION"],
  "lastAckAt": "2007-12-03T10:15:30Z",
  "lastAckReason": "xyz789",
  "lastChangeOrigin": "CARRIER",
  "lastError": "abc123",
  "lastInboundAt": "2007-12-03T10:15:30Z",
  "state": "APPLIED",
  "version": 987
}

ShipmentSyncIssue

Description

A disagreement between the store's order and the shipment that a sync did not settle on its own. There is at most one open issue per kind and field: a newer store value updates storeValue, a store value equal to appliedValue resolves it as SUPERSEDED_BY_STORE, and a closed shipment resolves it as MOOT.

Fields
Field Name Description
_id - ObjectID! The issue id, stable across the sync reply and every read; de-duplicate by it.
appliedValue - JSON What Pircel holds, which is what the label carries, in the field's shape (see storeValue). Null when there is nothing on Pircel's side.
availableActions - [SyncIssueActionEnum!]! The resolutions resolveShipmentSyncIssue accepts from the requester for this issue now; offer exactly these. Empty once resolved, for an INFORMATIONAL issue, which is a record and closes on its own, and for an operatorOnly issue unless the requester is an operator. APPLY_STORE_VALUE only where the issue holds a store value to put in place; under a live label an address, recipient, contents or collectible value needs the voucher canceled first. A cancel after listing or pickup, a replacement, a hold after listing and a repack offer KEEP_CURRENT only: it acknowledges the issue and Pircel keeps its state. To act on the store's cancel, cancel the shipment with cancelShipment, which settles its open issues as MOOT.
detectedAt - DateTime! When the issue was opened.
field - StoreManagedFieldEnum The store-managed field the issue is about.
kind - SyncIssueKindEnum! What happened.
operatorOnly - Boolean! Whether only an operator (Pircel support) may resolve it now: a store change to what the label carries (RECIPIENT_AFTER_LABEL, COLLECTIBLE_AFTER_LABEL, CONTENTS_AFTER_LABEL, METHOD_CHANGED) while the shipment is on a pickup list. Read from the shipment's current status, so it follows the shipment on and off the list. Any other requester gets empty availableActions, and resolveShipmentSyncIssue refuses them with resolveShipmentSyncIssue.operatorOnly.
resolution - SyncIssueResolutionEnum How the issue was closed; null while it is open.
resolvedAt - DateTime When the issue was closed; null while it is open.
resolvedBy - User The user who resolved it; null while open, or when the store or Pircel closed it.
severity - SyncIssueSeverityEnum! ACTIONABLE when a person must decide; only those count in ShipmentsResult.openSyncIssueCount.
sourceVersion - Int The store's sourceVersion that opened or last updated the issue. Null for an issue no sync opened: a cancel refused after listing or pickup, or an edited order's replacement.
storeValue - JSON What the store says now. Keys are the GraphQL output field names, by field: RECIPIENT_ADDRESS an Address (addressLine1, addressLine2, addressLine3, city, postcode, county, country, countryCode); RECIPIENT_NAME_PHONE { firstname, lastname, companyName, phone }; RECIPIENT_EMAIL { email }; COD_COLLECTIBLE { amount, currencyCode } in the order currency, appliedValue being the label's declared amount; PAYMENT_METHOD { paymentMethod }; PRODUCT_LINES a list of { _id, storeLineId, externalId, sku, title, quantity, price }; SHIPPING_METHOD { code }, with appliedValue { deliveryCompanySlug, serviceCode }; HOLDS a list of ShipmentHold; CANCELLATION { state }, with appliedValue { status }; STORE_SHIPMENT { storeShipmentId, tracks: [{ number, carrierCode, title }], createdAt }. Null when there is nothing on the store's side.
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "appliedValue": {},
  "availableActions": ["APPLY_STORE_VALUE"],
  "detectedAt": "2007-12-03T10:15:30Z",
  "field": "CANCELLATION",
  "kind": "ADDRESS_INVALID",
  "operatorOnly": false,
  "resolution": "APPLIED",
  "resolvedAt": "2007-12-03T10:15:30Z",
  "resolvedBy": User,
  "severity": "ACTIONABLE",
  "sourceVersion": 123,
  "storeValue": {}
}

ShipmentSynthetic

Description

Present only on shipments the synthetic shopper created with a verified token. They never progress past "new" and expire on their own.

Fields
Field Name Description
expiresAt - DateTime When the shipment is removed.
issuedAt - DateTime Token issue time from the synthetic shopper email.
nonce - String Correlates the shipment with a monitoring run.
verifiedAt - DateTime
Example
{
  "expiresAt": "2007-12-03T10:15:30Z",
  "issuedAt": "2007-12-03T10:15:30Z",
  "nonce": "xyz789",
  "verifiedAt": "2007-12-03T10:15:30Z"
}

ShipmentTrackingEventStatusEnum

Values
Enum Value Description

CUSTOMS_CLEARANCE

Step 4 (Optional): The shipment is undergoing customs clearance.

DELIVERED

Step 6: The shipment has been successfully delivered.

DELIVERY_CANCELED

Exception: The delivery of the shipment has been canceled.

EXCEPTION

Exception: An exception occurred during shipment delivery.

IN_TRANSIT

Step 3: The shipment is currently in transit.

OUT_FOR_DELIVERY

Step 5: The shipment is out for delivery.

PICKED_UP

Step 2: The shipment has been picked up by the delivery company.

RETURNED

Exception: The shipment has been returned.

VOUCHER_CREATED

Step 1: The shipping label for the shipment has been created.
Example
"CUSTOMS_CLEARANCE"

ShipmentVoucher

Description

Shipment-level voucher (master tracking number) for carriers that issue one. Null for carriers that only return per-piece vouchers (TCS).

Fields
Field Name Description
code - String! Carrier-assigned shipment-level identifier. May coincide with the lead parcel's tracking number for some carriers (FedEx, UPS) but is conceptually distinct.
createdAt - DateTime!
deliveryCompanyReference - String! Shipment-level reference (INTERNAL_SHORT, no piece suffix) stamped in the carrier's shipment-level reference slot.
merchantReference - String
status - VoucherStatusEnum!
Example
{
  "code": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "deliveryCompanyReference": "xyz789",
  "merchantReference": "xyz789",
  "status": "ACTIVE"
}

Shipper

Description

Shipper details including address and contact information.

Fields
Field Name Description
address - Address Address details.
addressBookEntry - ObjectID Reference to an address book entry from the Eshop address book.
contact - Contact Contact details.
Example
{
  "address": Address,
  "addressBookEntry": "5e5677d71bdc2ae76344968c",
  "contact": Contact
}

ShipperInput

Description

Input type for shipper details.

Fields
Input Field Description
address - AddressInput Shipper address.
addressBookEntryId - ObjectID Reference to an address book entry from the Eshop address book.
contact - ContactInput Shipper contact.
Example
{
  "address": AddressInput,
  "addressBookEntryId": "5e5677d71bdc2ae76344968c",
  "contact": ContactInput
}

ShippingRegionTypeEnum

Description

Enum representing the type of shipping region.

Values
Enum Value Description

DOMESTIC

Shipping within the same country.

INTERNATIONAL

Shipping between countries in different regions.

INTRA_AFRICAN

Shipping between African countries.

INTRA_ASEAN

Shipping between ASEAN member countries.

INTRA_ASIAN

Shipping between Asian countries.

INTRA_EUROPEAN

Shipping between European countries.

INTRA_MIDDLE_EASTERN

Shipping between Middle Eastern countries.

INTRA_NON_EU_EUROPEAN

Shipping between non-EU European countries.

INTRA_NORTH_AMERICAN

Shipping between North American countries.

INTRA_OCEANIAN

Shipping between Oceanian countries.

INTRA_SOUTH_AMERICAN

Shipping between South American countries.

INTRA_USMCA

Shipping between USMCA member countries (US, Mexico, Canada).

OTHER

Other shipping region type not covered by other categories.
Example
"DOMESTIC"

SlaTier

Values
Enum Value Description

TIER_1

TIER_2

TIER_3

Example
"TIER_1"

StatedBasis

Description

Which leg the stated figure is: EX_VAT the net, INC_VAT the gross, UNKNOWN a figure whose VAT position the source did not state (then no other leg is populated).

Values
Enum Value Description

EX_VAT

INC_VAT

UNKNOWN

Example
"EX_VAT"

StoreCapabilityEnum

Description

What a connected store declares it does. Pircel keeps no per-platform table: a store states its own capabilities on connectStore or updateStoreConnectionCapabilities.

Values
Enum Value Description

ORDER_SYNC

The store may send a placed order's current state through syncStoreOrder. Declaring it locks nothing by itself: while it is declared and the server runs order sync in enforce mode, a shipment's store fields are store-managed (Shipment.storeManagedFields) from that shipment's first accepted syncStoreOrder. A connection serving several websites declares it when any of them syncs; a website that does not sync leaves its orders editable. To lock an order at once, sync it right after booking it.

SHIPMENT_FEED

The store reads Pircel's changes to its shipments from the outbound feed. While it is declared, Pircel alerts its own team when the connection's outboundBacklog stays unacknowledged too long.

WRITES_BACK_PIRCEL_EDITS

The store writes the fields storeSync.changedFields lists back to its order, and states outboundVersionApplied on every syncStoreOrder. While it is declared, a dashboard user may change a synced order's recipient (RECIPIENT_ADDRESS, RECIPIENT_NAME_PHONE, RECIPIENT_EMAIL), and a store change to a field Pircel changed first opens EDIT_CONFLICT instead of replacing Pircel's value.
Example
"ORDER_SYNC"

StoreConnection

Fields
Field Name Description
_id - ObjectID
apiKey - StoreConnectionKey The key the store authenticates with. Null when none was issued, or when it was revoked while the connection stayed active.
capabilities - [StoreCapabilityEnum!]! What the store declared it does, on connectStore or updateStoreConnectionCapabilities. Empty when it declared nothing.
consecutiveFailures - Int Number of consecutive product-cache refresh failures. Resets to 0 on success. When the threshold is reached, status is flipped to ERROR.
createdAt - DateTime! When Pircel created this connection. A reconnect keeps it; a new installation is a new connection with its own.
credentialTransport - CredentialTransport How this store accepts its API credentials. Established when the store connects and re-learned if the store stops accepting the header. Read-only; it is a property of the merchant's web server, not a setting.
disconnectedAt - DateTime When the store or a merchant disconnected this connection. Null unless status is DISCONNECTED.
expiresAt - DateTime
externalId - String
hintDelivery - StoreHintDelivery! How change hints to hintUrl are going; state is NOT_CONFIGURED while the connection has no hintUrl or no signing secret. A connection that is not HEALTHY still syncs, by the store’s poll.
hintSigningSecretSet - Boolean! Whether the connection holds a secret to sign change hints with. The secret itself is never readable.
hintUrl - String Where Pircel posts a signed, data-less hint when shipments of this connection change, as the store declared it at connect.
lastFailedAt - DateTime Timestamp of the most recent failed product-cache refresh
lastFeedReadAt - DateTime When the store last read storeShipmentChanges for this connection with its own API key; null until it first does. Recorded at most once a minute, so it trails the latest read by up to a minute. An operator's or a user's read is not recorded.
lastSyncedAt - DateTime
outboundBacklog - StoreOutboundBacklog The shipment changes this connection's store has not taken yet, whatever its platform, its earlier orders on an ended connection of the same store included, as storeShipmentChanges lists them. Growing while lastFeedReadAt stands still, the store stopped reading the feed; growing while lastFeedReadAt moves, it reads but does not acknowledge. Null when it does not apply: the connection does not declare SHIPMENT_FEED, so its store never acknowledges and a count would mean nothing, or its status is RETIRED or REVOKED. An ERROR connection is still served, and can be overdue: Pircel's own calls to that store are failing, when a stalled backlog is most likely.
platform - Platform
pluginVersion - String
restBaseUrl - String The REST root the store itself reports serving from, as sent at connect. Absent for platforms that don't use one.
retiredAt - DateTime When a new installation of the same store replaced this connection. Null unless status is RETIRED.
scopes - [StoreConnectionScope]
status - ConnectionStatus
storeCurrencyCode - String ISO 4217 code the store reported at connect. Absent for connections made before the field existed, by a platform that does not send it, and once the connection is disconnected.
storeDomain - String
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "apiKey": StoreConnectionKey,
  "capabilities": ["ORDER_SYNC"],
  "consecutiveFailures": 987,
  "createdAt": "2007-12-03T10:15:30Z",
  "credentialTransport": "HEADER",
  "disconnectedAt": "2007-12-03T10:15:30Z",
  "expiresAt": "2007-12-03T10:15:30Z",
  "externalId": "xyz789",
  "hintDelivery": StoreHintDelivery,
  "hintSigningSecretSet": false,
  "hintUrl": "abc123",
  "lastFailedAt": "2007-12-03T10:15:30Z",
  "lastFeedReadAt": "2007-12-03T10:15:30Z",
  "lastSyncedAt": "2007-12-03T10:15:30Z",
  "outboundBacklog": StoreOutboundBacklog,
  "platform": "MAGENTO2",
  "pluginVersion": "xyz789",
  "restBaseUrl": "xyz789",
  "retiredAt": "2007-12-03T10:15:30Z",
  "scopes": ["READ_COUPONS"],
  "status": "ACTIVE",
  "storeCurrencyCode": "abc123",
  "storeDomain": "abc123"
}

StoreConnectionKey

Fields
Field Name Description
expiresAt - DateTime
hint - String! The key's prefix and its last 4 characters, so a merchant can tell which key a store holds. The key itself is never readable.
issuedAt - DateTime!
origin - StoreKeyOrigin!
revokedAt - DateTime
revokedReason - StoreKeyRevocationReason
scopes - [StoreKeyScope!]!
Example
{
  "expiresAt": "2007-12-03T10:15:30Z",
  "hint": "xyz789",
  "issuedAt": "2007-12-03T10:15:30Z",
  "origin": "AUTHORIZED",
  "revokedAt": "2007-12-03T10:15:30Z",
  "revokedReason": "RETIRED",
  "scopes": ["STORE_INTEGRATION"]
}

StoreConnectionScope

Values
Enum Value Description

READ_COUPONS

READ_CUSTOMERS

READ_ORDERS

READ_PRODUCTS

READ_SHIPPING

READ_SYSTEM_STATUS

WRITE_CUSTOMERS

WRITE_ORDERS

WRITE_PRODUCTS

Example
"READ_COUPONS"

StoreFreeShippingCodFee

Description

Who pays the cash-on-delivery fee when the store grants free shipping itself.

Values
Enum Value Description

CHARGE

The buyer pays the service's own cash-on-delivery fee (Costs.codFee); delivery stays free.

WAIVE

The merchant absorbs the fee and the buyer pays nothing. The default.
Example
"CHARGE"

StoreFreeShippingInput

Description

The store's own free shipping for a shipment, which the rate request would not show otherwise.

Fields
Input Field Description
granted - Boolean! True when the store gives free shipping for the whole shipment, such as by a cart rule. False states there is none. Free shipping on some items only is not a grant.
label - String The store's name for the grant, such as the cart rule's label. Recorded, never priced.
Example
{"granted": true, "label": "xyz789"}

StoreHintDelivery

Description

How change hints to the connection's hintUrl are going. A store whose hints are not delivered still syncs, by its poll, just more slowly.

Fields
Field Name Description
failingSince - DateTime When the current run of failures began. Null while hints are delivered.
lastAttemptAt - DateTime
lastDeliveredAt - DateTime
lastError - String Why the last failed attempt failed: the HTTP status, a timeout or a network error. Never the store’s response body.
lastFailedAt - DateTime
lastStatusCode - Int The HTTP status of the last attempt that got an answer, delivered or not.
state - StoreHintDeliveryStateEnum!
Example
{
  "failingSince": "2007-12-03T10:15:30Z",
  "lastAttemptAt": "2007-12-03T10:15:30Z",
  "lastDeliveredAt": "2007-12-03T10:15:30Z",
  "lastError": "abc123",
  "lastFailedAt": "2007-12-03T10:15:30Z",
  "lastStatusCode": 123,
  "state": "FAILING"
}

StoreHintDeliveryStateEnum

Values
Enum Value Description

FAILING

Hints are failing since failingSince and are retried with backoff for up to six hours each. The store keeps up by its poll.

HEALTHY

Hints are sent, and the last one was delivered (or none was needed yet).

NOT_CONFIGURED

The connection has no hintUrl or no signing secret, so no hints are sent. The store keeps up by its poll.

STOPPED

The store refused a hint in a way retrying cannot fix (a rejected signature, an unknown route, a malformed request, a redirect). No hint is retried until the store provisions its url or secret again (connectStore, rotateStoreHintSecret), except one attempt an hour. The store keeps up by its poll.
Example
"FAILING"

StoreHoldInput

Description

One of the store's holds. Send no since: the server stamps when it first sees each reason.

Fields
Input Field Description
note - String Free text shown with the hold, such as the store's status label.
reason - StoreHoldReasonEnum! Why the store holds the order.
Example
{
  "note": "abc123",
  "reason": "AWAITING_PAYMENT"
}

StoreHoldReasonEnum

Description

Why the store holds an order: what the store itself says means "do not fulfil yet". An unpaid offline order (bank transfer, check) is not a hold.

Values
Enum Value Description

AWAITING_PAYMENT

The order waits for a payment the buyer has not completed (Magento state pending_payment).

MERCHANT_HOLD

The merchant put the order on hold (Magento state holded); note carries the store status label.

OTHER

Another reason the store has for not fulfilling yet; note says which.

PAYMENT_REVIEW

The payment is under review by the gateway or the merchant (Magento state payment_review).

SUSPECTED_FRAUD

The store flagged the order as suspected fraud (Magento status fraud, in any state).
Example
"AWAITING_PAYMENT"

StoreKeyOrigin

Values
Enum Value Description

AUTHORIZED

Issued when the merchant approved the store.
Example
"AUTHORIZED"

StoreKeyRevocationReason

Description

The reasons visible through StoreConnection.apiKey: only an ended connection keeps pointing at its revoked key. A superseded, replayed or operator-revoked key is unlinked from its connection, so its reason lives on the key record and in the audit log.

Values
Enum Value Description

RETIRED

A new installation of the same store replaced the connection.
Example
"RETIRED"

StoreKeyScope

Values
Enum Value Description

STORE_INTEGRATION

Quote, book, update, cancel and read this store's shipments; sync its orders and read its shipment feed; read the eshop's shipping settings; manage its own connection. It cannot change the eshop's settings, carriers, invoices or users, and it sees only its own connection.
Example
"STORE_INTEGRATION"

StoreManagedFieldEnum

Description

A field the store owns on a shipment. The same names are used by syncStoreOrder's reply, by sync issues and by Shipment.storeManagedFields.

Values
Enum Value Description

CANCELLATION

The order's cancellation, reported through cancelShipment. An issue field only.

COD_COLLECTIBLE

orderAmounts.amountDue on a cash-on-delivery order: what the courier collects.

HOLDS

The store's holds (Shipment.holds with source STORE).

ORDER_TENDERS

orderAmounts.payments, prepaidTotal, refunds and refundedTotal.

ORDER_TOTALS

Every other orderAmounts field: grandTotal, the subtotal, discount, shipping, fee and tax totals, their lines, pricesIncludeTax and currency.

PAYMENT_METHOD

paymentMethod.

PRODUCT_LINES

The store's paths of each line (storeLineId, externalId, sku, title, quantity, price, lineSubtotal, lineDiscount, lineTotal, requiresShipping, kind, categories, image, metadata). A line's customs and physical paths are Pircel's.

RECIPIENT_ADDRESS

recipient.address.

RECIPIENT_EMAIL

recipient.contact.email.

RECIPIENT_NAME_PHONE

recipient.contact first name, last name, company name and phone.

SHIPPING_CHARGE

What the buyer is charged for delivery: Pircel's buyer charge, which a cost override or an operator's modifyShipmentRatePricing changes. A feed field only (ShipmentStoreSync.changedFields).

SHIPPING_METHOD

The shipping method. From the store, its method code, compared only: a sync never re-selects a rate. In the feed (ShipmentStoreSync.changedFields), Pircel's selection, which a move changes.

STORE_SHIPMENT

A shipment the merchant made in the store rather than through Pircel. An issue field only.
Example
"CANCELLATION"

StoreOutboundBacklog

Description

What Pircel changed on a connection's shipments that its store has not taken yet, read from the store's own acknowledgements. A store whose worker stopped shows here even while it still answers hints.

Fields
Field Name Description
failed - Int! Of unacknowledged, the shipments the store acknowledged FAILED at their current storeSync.version.
oldestUnacknowledgedAt - DateTime The storeSync.changedAt of the oldest of them: since when the store has been behind. Null when there are none.
overdue - Boolean! True exactly when Pircel's backlog check alerts on this connection, whether or not an alert already went out this hour: oldestUnacknowledgedAt is older than Pircel's alert threshold (30 minutes unless configured otherwise). Decided by the same rule as the alert; read it rather than comparing oldestUnacknowledgedAt with a threshold of your own. False while the backlog is empty or younger.
unacknowledged - Int! Shipments whose current storeSync.version the store has not acknowledged APPLIED or SKIPPED: not acknowledged at all, or acknowledged FAILED. A shipment counts once however many changes it has waiting.
Example
{
  "failed": 987,
  "oldestUnacknowledgedAt": "2007-12-03T10:15:30Z",
  "overdue": false,
  "unacknowledged": 123
}

StoreShipment

Description

A shipment the merchant made in the store rather than through Pircel. Recorded for the record; Pircel does nothing with it.

Fields
Field Name Description
createdAt - DateTime When the store says it was made.
recordedAt - DateTime! When Pircel first recorded it.
storeShipmentId - String! The store's id for its shipment.
tracks - [StoreTrack!]! Its tracking numbers.
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "recordedAt": "2007-12-03T10:15:30Z",
  "storeShipmentId": "abc123",
  "tracks": [StoreTrack]
}

StoreSyncChangeOriginEnum

Values
Enum Value Description

CARRIER

The carrier reported it (a tracking status).

PIRCEL

Someone in Pircel did it (the dashboard, an operator).

STORE

The store's own request did it, such as a cancellation it asked for. The store can skip applying its own echo.
Example
"CARRIER"

StoreSyncStateEnum

Values
Enum Value Description

APPLIED

The store applied the current version.

FAILED

The store failed to apply the current version.

PENDING

The store has not acknowledged the current version yet.

SKIPPED

The store received the current version and had nothing to do.
Example
"APPLIED"

StoreTrack

Description

A tracking number on a shipment the merchant made in the store.

Fields
Field Name Description
carrierCode - String The store's carrier code.
number - String! The tracking number.
title - String The store's carrier title.
Example
{
  "carrierCode": "xyz789",
  "number": "xyz789",
  "title": "xyz789"
}

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"xyz789"

SurchargeType

Description

Types of surcharges

Values
Enum Value Description

ADDITIONAL_HANDLING

Additional handling surcharge

COD

Cash on delivery surcharge

DELIVERY_AREA

Delivery area surcharge

FUEL

Fuel surcharge

OTHER

Other surcharge type

SATURDAY_DELIVERY

Saturday delivery surcharge
Example
"ADDITIONAL_HANDLING"

SyncIssueActionEnum

Description

A person's decision on a sync issue; ShipmentSyncIssue.availableActions lists those an issue accepts. Resolving an issue that holds the shipment releases the hold, whichever action is taken.

Values
Enum Value Description

APPLY_STORE_VALUE

Apply the store's value. Offered only for a kind that holds one: an address, the recipient, the contents, the collectible or the shipping method. Under a live label an address, recipient, contents or collectible value is refused; cancel the voucher first.

KEEP_CURRENT

Keep Pircel's state and close the issue; for a kind with nothing to apply (a cancel after listing or pickup, a replacement) it acknowledges the issue. The store keeps showing its own value until it states another. To act on the store's cancel instead, cancel the shipment with cancelShipment, which settles its open issues as MOOT.
Example
"APPLY_STORE_VALUE"

SyncIssueKindEnum

Description

Why a store's change was not applied, or what it asks a person to decide.

Values
Enum Value Description

ADDRESS_INVALID

The store's new address failed validation and was not applied; the shipment is held (SYNC_ISSUE) until it resolves.

ADDRESS_NOT_SERVICEABLE

The new address was applied, but the selected service could not be re-quoted for it; the shipment is held (SYNC_ISSUE) until a rate is re-selected or the issue is resolved.

CANCELED_AFTER_LISTING

The store canceled the order after the shipment was put on a pickup list; only an operator can take it back.

CANCELED_AFTER_PICKUP

The store canceled the order after the carrier collected the parcel; a return is needed.

COLLECTIBLE_AFTER_LABEL

The cash-on-delivery amount, or a payment method change that moves it, arrived after the label declared another amount.

CONTENTS_AFTER_LABEL

The lines still to ship changed after the label.

EDIT_CONFLICT

Both sides edited the field: the store changed it before it had written back the change made in Pircel. Neither value is applied or written back until a person resolves it: APPLY_STORE_VALUE takes the store's, KEEP_CURRENT keeps Pircel's and lists it for the store to write back. A store value equal to Pircel's resolves it as SUPERSEDED_BY_STORE.

HELD_AFTER_LISTING

The store held the order after the shipment was put on a pickup list.

HELD_AFTER_PICKUP

The store held the order after the carrier collected it.

METHOD_CHANGED

The store states a shipping method other than the first one it stated. A sync never re-selects a rate.

RECIPIENT_AFTER_LABEL

The recipient's address, name, company or phone changed after the label.

REPACK_NEEDED

The lines changed before the label, on a shipment whose parcels a person packed: the lines were applied and the parcels need repacking.

REPLACED_SHIPMENT_NOT_FOUND

The booking named a shipment to replace (replacesShipment) that Pircel does not hold. Recorded; the booking stands and nothing is held.

REPLACES_SHIPPED_ORDER

An edited order was booked as a new shipment that replaces this one, or this shipment replaces one that has not been canceled.

STORE_SHIPMENT_OUTSIDE_PIRCEL

The merchant made a shipment in the store that Pircel did not make. Recorded; nothing is changed.
Example
"ADDRESS_INVALID"

SyncIssueResolutionEnum

Description

How a sync issue was closed.

Values
Enum Value Description

APPLIED

A person applied the store's value.

KEPT

A person kept Pircel's value.

MOOT

The issue's cause went away without anyone deciding it: the shipment closed or was canceled, the shipment a replacement waited on was canceled, or a newer address replaced the one it was about.

SUPERSEDED_BY_STORE

The store stated a value that settles it: one equal to Pircel's, a newer one that was applied, or the withdrawal of its own hold or store shipment.
Example
"APPLIED"

SyncIssueSeverityEnum

Description

Whether a sync issue needs a person.

Values
Enum Value Description

ACTIONABLE

A person must decide. Counted in ShipmentsResult.openSyncIssueCount.

INFORMATIONAL

Recorded for the record: the carrier has the parcel, or nothing needs changing.
Example
"ACTIONABLE"

TariffBasisKindEnum

Values
Enum Value Description

FLAT

WEIGHT_STEP

WEIGHT_BANDS

PERCENT

Example
"FLAT"

TariffChargeCategoryEnum

Values
Enum Value Description

BASE

SURCHARGE

OPTION

FEE

RETURN

Example
"BASE"

TariffRouteEnum

Description

Which agreement answered: the eshop's own or the carrier default.

Values
Enum Value Description

AGREEMENT

CARRIER_DEFAULT

Example
"AGREEMENT"

TariffSourceEnum

Description

Where the rate card came from: a checked-in file or the published version in the database.

Values
Enum Value Description

FILES

DB

Example
"FILES"

TariffZoneRouteEnum

Description

How a tariff quote chose its zone: a decided route (settlement-match, exact-postcode, single-zone) or a fallback the data did not decide (priority-among-candidates, unmatched-exception, contested-exceptions, remainder, no-postcode).

Values
Enum Value Description

SETTLEMENT_MATCH

EXACT_POSTCODE

PRIORITY_AMONG_CANDIDATES

UNMATCHED_EXCEPTION

CONTESTED_EXCEPTIONS

REMAINDER

SINGLE_ZONE

NO_POSTCODE

Example
"SETTLEMENT_MATCH"

TaxModeEnum

Description

How VAT rates are resolved for the charges Pircel prices.

Values
Enum Value Description

LAW

The effective-dated, law-sourced rate table. Requires this profile's accountant-confirmed facts: without confirmedAt every rate resolution fails closed, so a profile switched to LAW without it cannot price at all, and without distanceSalesTaxation every intra-EU distance sale is refused.

LEGACY

Reproduces pre-taxation-module behaviour exactly — zero price movement. The default. ⚠️ Its rate map is Cyprus 19% / Greece 24% and 0% everywhere else, so a legacy eshop charges no VAT on international shipping.
Example
"LAW"

TaxProfile

Description

How VAT is resolved for the charges Pircel prices (shipping and the COD fee), plus the accountant-confirmed facts law mode requires. Read-only over GraphQL — there is no writer and deliberately so: confirmedAt is an attestation, not a setting, and law-mode resolution fails closed without it. Nothing here describes the eshop's own product tax; that stays with the platform.

Fields
Field Name Description
confirmedAt - DateTime When an accountant confirmed the law-mode facts on this profile. Required for LAW mode — resolution fails closed with law-mode-unconfirmed while it is absent, so LAW without this is a profile that cannot price. Enforced where rates resolve rather than on the document, because the query-level updates that write this profile never run a Mongoose cross-field validator.
confirmedBy - String Who confirmed the law-mode facts (accountant or owner reference), for the audit trail.
distanceSalesTaxation - DistanceSalesTaxationEnum Where intra-EU distance sales of goods are taxed. Required for LAW mode: null means unstated, and resolution then refuses an intra-EU distance sale with distance-sales-taxation-unstated (a domestic or export supply does not depend on it). Static: an ORIGIN eshop that crosses the threshold is re-set to DESTINATION.
establishmentCountry - String ISO 3166-1 alpha-2 country the eshop is established in — its merchant of record. Drives origin-rate resolution in law mode. Defaults to GR.
goodsRateCategory - GoodsRateCategoryEnum VAT rate class of the eshop's goods; only STANDARD is supported today.
islandEstablishment - String Qualifying Greek island the eshop is established on (Ε.2113/2025 Annex), if any — it grants the reduced 17/9/4 rates on that eshop's supplies in law mode. Accountant-confirmed and never derived from an address: an eshop with an island postcode is not necessarily established there, and the reduced rate belongs to establishment.
mode - TaxModeEnum Which rate resolution applies. Defaults to LEGACY.
ossRegistered - Boolean Whether the eshop is registered for the EU One-Stop Shop. Information only: it records how destination VAT is filed. OSS does not choose the rate; distanceSalesTaxation does.
pricesIncludeVat - Boolean The eshop's declared default for whether its order amounts include VAT — the last rung of the basis ladder, used only when an order carries no per-order tag of its own (orderAmounts.pricesIncludeTax, or the legacy includeVat). A per-shipment tag always wins. Defaults to true, which is why an untagged order from a VAT-exclusive store resolves wrongly unless this is set.
vatRegistrations - [VatRegistration!]! The states the eshop is VAT-registered in, over time. A collect-from-store order is a local sale at the store, so a store abroad is only taxed where a registration is in force on the store's local day; otherwise resolution refuses it with store-not-registered. establishmentCountry always counts as registered, so an empty list resolves as before.
Example
{
  "confirmedAt": "2007-12-03T10:15:30Z",
  "confirmedBy": "xyz789",
  "distanceSalesTaxation": "DESTINATION",
  "establishmentCountry": "abc123",
  "goodsRateCategory": "STANDARD",
  "islandEstablishment": "xyz789",
  "mode": "LAW",
  "ossRegistered": false,
  "pricesIncludeVat": true,
  "vatRegistrations": [VatRegistration]
}

TaxedMoney

Description

Money that carries a VAT position, in integer cents. statedCents is the figure as the source stated it, on statedBasis; of netCents, taxCents and grossCents either none, one alone, or all three are populated (netCents + taxCents === grossCents exactly) — never two — and ratePercent only beside a leg. An UNKNOWN basis is load-bearing: the stated figure is all that is known.

Fields
Field Name Description
currencyCode - CurrencyCode! ISO 4217 currency of every amount here. Always EUR.
grossCents - Int
netCents - Int
ratePercent - Float
statedBasis - StatedBasis!
statedCents - Int!
taxCents - Int
Example
{
  "currencyCode": "EUR",
  "grossCents": 987,
  "netCents": 123,
  "ratePercent": 987.65,
  "statedBasis": "EX_VAT",
  "statedCents": 123,
  "taxCents": 987
}

TrackingAccessGrant

Fields
Field Name Description
accessToken - String! Send as trackShipment(accessToken:) for the VERIFIED view until expiresAt. Keep it in memory or sessionStorage, never in a URL.
expiresAt - DateTime! When the token stops granting access: two hours from now.
Example
{
  "accessToken": "abc123",
  "expiresAt": "2007-12-03T10:15:30Z"
}

TrackingAccessLevel

Values
Enum Value Description

PUBLIC

Anyone holding the eshop and shipment ids: status, progress and destination city.

VERIFIED

The request carried a valid link or access token for this shipment: verified is set.
Example
"PUBLIC"

TrackingAccessTokenStatus

Values
Enum Value Description

ABSENT

No accessToken was sent.

EXPIRED

A token Pircel issued for this shipment, past its expiry. Ask the buyer for the email or phone of the order (verifyTrackingAccess).

INVALID

Anything else: malformed, signed with a key no longer held, for another shipment, or verified tracking is switched off.

VALID

The token grants this shipment: access is VERIFIED.
Example
"ABSENT"

TrackingDestination

Description

Where the shipment is going, no finer than the city: shown to anyone holding the shipment's id.

Fields
Field Name Description
city - String City (original input).
country - String Country (original input).
countryCode - String Country code in ISO 3166-1 alpha-2 format.
Example
{
  "city": "xyz789",
  "country": "xyz789",
  "countryCode": "abc123"
}

TrackingDetails

Fields
Field Name Description
carrierTrackingUrl - String Link to this shipment on the carrier's tracking site, derived on every read from the carrier's current tracking metadata and the shipment's active voucher (the shipment-level voucher first, then parcel vouchers in order). Null when the shipment has no active voucher (never labelled, voucher canceled, or status CANCELED / VOUCHER_CANCELED) or when the carrier offers no deep link. The link stored at labelling is returned only when the carrier record cannot be read or its metadata cannot build a link.
deliveredAt - DateTime When the shipment was delivered: while the carrier's latest event is DELIVERED, the time of the first event of that final DELIVERED run, the hand-over rather than paperwork filed after it. Null otherwise.
deliveryCompany - DeliveryCompany Reference to the delivery company
eshopTrackingUrl - String The buyer's tracking page for this shipment: the eshop's own when set and https, otherwise Pircel's hosted page. Derived on every read from the eshop's current trackingPageUrl and signed with the buyer's link token (#t=). The link stored at labelling is returned only when the eshop cannot be read or its page is not an https URL, and only if that link is https itself.
estimatedDelivery - DateTime Estimated delivery date
events - [TrackingEvent] List of tracking events. The label-created event recorded when the label was made is left out once the carrier reports its own.
isActive - Boolean Whether this tracking detail is active
lastStatus - ShipmentTrackingEventStatusEnum Last tracking status
lastSyncedAt - DateTime When the tracking information was last synced with carrier
lastUpdated - DateTime When the tracking information was last updated
nextPollAt - DateTime When to next poll for tracking updates
returnToSender - Boolean Whether the shipment is being returned to sender
slaTier - SlaTier Service level agreement tier
voucherCode - String The voucher code for this tracking detail
Example
{
  "carrierTrackingUrl": "xyz789",
  "deliveredAt": "2007-12-03T10:15:30Z",
  "deliveryCompany": DeliveryCompany,
  "eshopTrackingUrl": "xyz789",
  "estimatedDelivery": "2007-12-03T10:15:30Z",
  "events": [TrackingEvent],
  "isActive": false,
  "lastStatus": "CUSTOMS_CLEARANCE",
  "lastSyncedAt": "2007-12-03T10:15:30Z",
  "lastUpdated": "2007-12-03T10:15:30Z",
  "nextPollAt": "2007-12-03T10:15:30Z",
  "returnToSender": true,
  "slaTier": "TIER_1",
  "voucherCode": "abc123"
}

TrackingEvent

Fields
Field Name Description
deliveryCompany - TrackingEventDeliveryCompany Minimal carrier identity for this tracking event
description - String Human-readable description of the tracking event
location - TrackingLocation Location information for the tracking event
status - ShipmentTrackingEventStatusEnum! Status code or description for the tracking event
timestamp - DateTime When the tracking event occurred
Example
{
  "deliveryCompany": TrackingEventDeliveryCompany,
  "description": "xyz789",
  "location": TrackingLocation,
  "status": "CUSTOMS_CLEARANCE",
  "timestamp": "2007-12-03T10:15:30Z"
}

TrackingEventDeliveryCompany

Description

Minimal carrier identity attached to a public tracking event

Fields
Field Name Description
_id - ID!
logo - Logo Carrier logo for display on branded tracking pages
name - String! Carrier display name
slug - String! Carrier slug
Example
{
  "_id": "4",
  "logo": Logo,
  "name": "xyz789",
  "slug": "xyz789"
}

TrackingLocation

Fields
Field Name Description
address - TrackingLocationAddress
coordinates - TrackingLocationCoordinates
Example
{
  "address": TrackingLocationAddress,
  "coordinates": TrackingLocationCoordinates
}

TrackingLocationAddress

Fields
Field Name Description
addressLine1 - String
city - String
country - String
countryCode - String
postcode - String
Example
{
  "addressLine1": "abc123",
  "city": "xyz789",
  "country": "abc123",
  "countryCode": "xyz789",
  "postcode": "abc123"
}

TrackingLocationCoordinates

Fields
Field Name Description
latitude - Float
longitude - Float
Example
{"latitude": 987.65, "longitude": 987.65}

TrackingOrderLookup

Fields
Field Name Description
accessToken - String! Send as trackShipment(accessToken:) for the VERIFIED view until expiresAt. Keep it in memory or sessionStorage, never in a URL.
expiresAt - DateTime! When the token stops granting access: two hours from now.
shipmentId - ObjectID! Pass to trackShipment with the access token.
Example
{
  "accessToken": "xyz789",
  "expiresAt": "2007-12-03T10:15:30Z",
  "shipmentId": "5e5677d71bdc2ae76344968c"
}

TrackingProgress

Description

The shipment's progress as anyone may see it. Without an active label there are no events and the dates are null.

Fields
Field Name Description
deliveredAt - DateTime When the shipment was delivered: while the carrier's latest event is DELIVERED, the time of the first event of that final DELIVERED run, the hand-over rather than paperwork filed after it. Null otherwise.
estimatedDelivery - DateTime Estimated delivery date
lastUpdated - DateTime When the tracking information was last updated
events - [TrackingProgressEvent!]! Carrier events, oldest first. The label-created event recorded when the label was made is left out once the carrier reports its own.
returnToSender - Boolean! Whether the shipment is being returned to sender
Example
{
  "deliveredAt": "2007-12-03T10:15:30Z",
  "estimatedDelivery": "2007-12-03T10:15:30Z",
  "lastUpdated": "2007-12-03T10:15:30Z",
  "events": [TrackingProgressEvent],
  "returnToSender": true
}

TrackingProgressEvent

Description

A carrier event as anyone may see it: what happened, when, by which carrier and in which city.

Fields
Field Name Description
city - String
countryCode - String
deliveryCompany - TrackingEventDeliveryCompany Minimal carrier identity for this tracking event
status - ShipmentTrackingEventStatusEnum! Status code or description for the tracking event
timestamp - DateTime When the tracking event occurred
Example
{
  "city": "abc123",
  "countryCode": "abc123",
  "deliveryCompany": TrackingEventDeliveryCompany,
  "status": "CUSTOMS_CLEARANCE",
  "timestamp": "2007-12-03T10:15:30Z"
}

TrackingResult

Fields
Field Name Description
access - TrackingAccessLevel! PUBLIC, or VERIFIED when the request carried a valid token for this shipment.
accessTokenStatus - TrackingAccessTokenStatus! Why the request is or is not verified.
destination - TrackingDestination! The destination city and country.
progress - TrackingProgress! The shipment's carrier progress.
shipmentStatus - ShipmentStatusEnum! The shipment's status. Without an active label it says why: not labelled yet (NEW, CHECKOUT_COMPLETE, MANUALLY_CREATED), label canceled and not yet replaced (VOUCHER_CANCELED), or shipment canceled (CANCELED).
verified - VerifiedTracking Null unless access is VERIFIED: the recipient, the lines, the parcels, the voucher code, the carrier link and the event detail.
Example
{
  "access": "PUBLIC",
  "accessTokenStatus": "ABSENT",
  "destination": TrackingDestination,
  "progress": TrackingProgress,
  "shipmentStatus": "BOOKING_UNRESOLVED",
  "verified": VerifiedTracking
}

TrackingResultAddress

Fields
Field Name Description
addressLine1 - String Address line 1 (original input).
addressLine2 - String Address line 2 (original input).
addressLine3 - String Address line 3 (original input).
city - String City (original input).
country - String Country (original input).
countryCode - String Country code in ISO 3166-1 alpha-2 format.
county - String County (original input).
postcode - String Postcode (original input).
Example
{
  "addressLine1": "abc123",
  "addressLine2": "abc123",
  "addressLine3": "abc123",
  "city": "abc123",
  "country": "abc123",
  "countryCode": "xyz789",
  "county": "abc123",
  "postcode": "abc123"
}

TrackingResultContact

Fields
Field Name Description
companyName - String Company name.
firstname - String First name.
lastname - String Last name.
Example
{
  "companyName": "xyz789",
  "firstname": "xyz789",
  "lastname": "abc123"
}

TrackingResultEvent

Description

A carrier event on the tracking page, with its full detail.

Fields
Field Name Description
deliveryCompany - TrackingEventDeliveryCompany Minimal carrier identity for this tracking event
description - String Human-readable description of the tracking event
location - TrackingResultEventLocation Location information for the tracking event
status - ShipmentTrackingEventStatusEnum! Status code or description for the tracking event
timestamp - DateTime When the tracking event occurred
Example
{
  "deliveryCompany": TrackingEventDeliveryCompany,
  "description": "abc123",
  "location": TrackingResultEventLocation,
  "status": "CUSTOMS_CLEARANCE",
  "timestamp": "2007-12-03T10:15:30Z"
}

TrackingResultEventLocation

Fields
Field Name Description
address - TrackingLocationAddress
Example
{"address": TrackingLocationAddress}

TrackingResultParcel

Fields
Field Name Description
dimensions - ParcelDimensions
weight - Float Parcel's weight in kilograms.
Example
{"dimensions": ParcelDimensions, "weight": 987.65}

TrackingResultProduct

Fields
Field Name Description
image - String Full URL to the product's image.
quantity - Int! Number of units on this line.
title - String Name of the product.
Example
{
  "image": "abc123",
  "quantity": 987,
  "title": "abc123"
}

TrackingResultRecipient

Fields
Field Name Description
address - TrackingResultAddress Address details.
contact - TrackingResultContact Contact details.
Example
{
  "address": TrackingResultAddress,
  "contact": TrackingResultContact
}

TrackingUrlInformation

Fields
Field Name Description
baseUrl - String
exampleUrl - String
parameterName - String
supportsDeepLink - Boolean
urlType - TrackingUrlTypeEnum
Example
{
  "baseUrl": "abc123",
  "exampleUrl": "abc123",
  "parameterName": "xyz789",
  "supportsDeepLink": false,
  "urlType": "PATH"
}

TrackingUrlTypeEnum

Values
Enum Value Description

PATH

QUERY

Example
"PATH"

TransitTime

Description

Delivery time information

Fields
Field Name Description
estimatedDeliveryDate - Date Estimated delivery date
guaranteed - Boolean Whether delivery time is guaranteed
maxDays - Int Maximum days required for delivery
minDays - Int Minimum days required for delivery
Example
{
  "estimatedDeliveryDate": "2007-12-03",
  "guaranteed": false,
  "maxDays": 123,
  "minDays": 123
}

TransitTimeInput

Description

Input for delivery time information

Fields
Input Field Description
estimatedDeliveryDate - Date Estimated delivery date
guaranteed - Boolean Whether delivery time is guaranteed
maxDays - Int Maximum days required for delivery
minDays - Int Minimum days required for delivery
Example
{
  "estimatedDeliveryDate": "2007-12-03",
  "guaranteed": false,
  "maxDays": 987,
  "minDays": 987
}

UnassociatedVoucher

Description

Vouchers returned by the carrier that an adapter could not map to a specific parcel. Loud-failure escape hatch; engineering should audit shipments with non-empty unassociated lists.

Fields
Field Name Description
code - String!
rawDeliveryCompanyResponse - JSON Original carrier response fragment, kept verbatim for debugging.
reason - String Why this voucher could not be associated to a parcel.
status - VoucherStatusEnum!
Example
{
  "code": "xyz789",
  "rawDeliveryCompanyResponse": {},
  "reason": "abc123",
  "status": "ACTIVE"
}

User

Fields
Field Name Description
_id - ObjectID Unique identifier for this user account
email - String User email address
eshop - Eshop Reference to the e-shop that this user belongs to or manages
firstname - String User's first name
lastname - String User's last name
type - UserTypeEnum User role type (admin, eshop, customer, deliveryCompany)
Example
{
  "_id": "5e5677d71bdc2ae76344968c",
  "email": "abc123",
  "eshop": Eshop,
  "firstname": "xyz789",
  "lastname": "abc123",
  "type": "ADMIN"
}

UserTypeEnum

Values
Enum Value Description

ADMIN

System administrator with full access to all features and e-shops

CUSTOMER

DELIVERY_COMPANY

Delivery company staff member with access to carrier-specific features

ESHOP

E-shop owner or staff member with access to their store's shipping operations
Example
"ADMIN"

VatBasis

Description

Whether an amount includes VAT.

Values
Enum Value Description

EX_VAT

No VAT included.

INC_VAT

VAT included; vatAmountCents states how much.

UNKNOWN

The rate source declared no basis. NOT a synonym for ex-vat — treat the amount as uncomparable with tagged ones rather than assuming either way.
Example
"EX_VAT"

VatDetails

Description

VAT (Value Added Tax) information for a service

Fields
Field Name Description
basisContradiction - Boolean True when the per-order basis signal disagreed with the eshop's declared basis (taxProfile.pricesIncludeVat); the order's signal still resolved valueAddedTaxIncluded. Absent when the eshop declares nothing or the two agree.
basisSource - String Which signal resolved valueAddedTaxIncluded: "order-tag" (orderAmounts.pricesIncludeTax), "legacy-include-vat" (the includeVat argument), or "eshop-default". Absent on shipments predating the amounts-first contract.
valueAddedTaxIncluded - Boolean Whether VAT is included in the service prices
Example
{
  "basisContradiction": false,
  "basisSource": "abc123",
  "valueAddedTaxIncluded": false
}

VatRegistration

Description

A state the eshop is VAT-registered in, for the days it holds. Read-only, written with the rest of the profile.

Fields
Field Name Description
countryCode - String! EU member state (ISO 3166-1 alpha-2) or XI for Northern Ireland.
established - Boolean! Whether the eshop has an establishment there (its seat, or premises with staff) rather than only a VAT number. An establishment outside establishmentCountry rules out the ORIGIN regime.
validFrom - String First local calendar day of the registration (YYYY-MM-DD, in that state's time zone). Null means it predates every order.
validUntil - String Local calendar day the registration ended (YYYY-MM-DD), exclusive. Null means in force.
Example
{
  "countryCode": "abc123",
  "established": true,
  "validFrom": "abc123",
  "validUntil": "xyz789"
}

VerifiedTracking

Description

What only the buyer sees: set when the request carries a valid link or access token for this shipment.

Fields
Field Name Description
carrierTrackingUrl - String Link to this shipment on the carrier's tracking site, derived on every read from the carrier's current tracking metadata and the shipment's active voucher (the shipment-level voucher first, then parcel vouchers in order). Null when the shipment has no active voucher (never labelled, voucher canceled, or status CANCELED / VOUCHER_CANCELED) or when the carrier offers no deep link. The link stored at labelling is returned only when the carrier record cannot be read or its metadata cannot build a link.
events - [TrackingResultEvent!]! The same events as progress.events, in the same order, with their description and location.
parcels - [TrackingResultParcel!]! The shipment's parcels: weight and dimensions.
products - [TrackingResultProduct!]! The shipment's lines: title, quantity and image.
recipient - TrackingResultRecipient! The recipient's name, company and delivery address. Never an email, phone or geocoded position.
voucherCode - String The voucher code for this tracking detail
Example
{
  "carrierTrackingUrl": "xyz789",
  "events": [TrackingResultEvent],
  "parcels": [TrackingResultParcel],
  "products": [TrackingResultProduct],
  "recipient": TrackingResultRecipient,
  "voucherCode": "abc123"
}

VoucherCancellationModeEnum

Values
Enum Value Description

CASCADE

Canceling the shipment-level voucher cancels every parcel voucher in one carrier call (e.g. UPS void by ShipmentIdentificationNumber).

PER_PIECE

Each parcel voucher must be canceled individually (e.g. FedEx).

SHIPMENT_ONLY

Carrier doesn't support multi-piece shipments, so there is only one voucher to cancel.
Example
"CASCADE"

VoucherCapabilityScopeEnum

Values
Enum Value Description

BOTH

Carrier accepts customer references both at the shipment level and per parcel.

NONE

Carrier does not accept any customer reference field.

PARCEL

Carrier accepts customer references per parcel only.

SHIPMENT

Carrier accepts customer references at the shipment level only.
Example
"BOTH"

VoucherStatusEnum

Values
Enum Value Description

ACTIVE

Voucher issued by the carrier and currently valid for tracking, pickup, and printing.

CANCELED

Voucher voided by user or system action (cancelVoucher mutation, cascade cancellation, re-issue replacement), or canceled by the carrier before it collected the parcel. Terminal.

EXPIRED

Voucher auto-expired in the carrier's system, typically by exceeding the carrier's printable / usable window. Terminal.

FAILED

Carrier rejected voucher creation. Terminal; a fresh voucher record must be created to retry.

PENDING

Async voucher creation in flight: carrier accepted the request but hasn't returned a tracking number yet. Most carriers respond synchronously and skip this state.
Example
"ACTIVE"

VoucherTracking

Fields
Field Name Description
checkpointAction - String e.g ΑΝΑΧΩΡΗΣΗ ΛΑΜΙΑ
checkpointDateTime - DateTime 2019-01-11T15:38:44.153
checkpointLocation - String e.g HUB Π.ΡΑΛΛΗ
checkpointNotes - String Notes
code - String
shipmentId - ObjectID
Example
{
  "checkpointAction": "abc123",
  "checkpointDateTime": "2007-12-03T10:15:30Z",
  "checkpointLocation": "abc123",
  "checkpointNotes": "abc123",
  "code": "xyz789",
  "shipmentId": "5e5677d71bdc2ae76344968c"
}