SazitoSazito SDKv1.4.0
API Reference

Invoices

Checkout invoice creation, updates, shipping assignment, and discount flows.

Module role in sales flow

invoices is the checkout state machine between cart and payment.

  • create builds checkout state from current cart credentials.
  • Use the invoice methods to set its address, shipping method, discount code, notes, and credit.
  • payments depends on an existing invoice.

Contract notes

  • get uses the refresh contract under the hood.
  • create/refresh require a cart identifier from stored cart credentials.
  • assignShippingMethod expects each invoiceItemIds value as a string.
  • addCredit generally requires authenticated user context in Authorization.
  • shippingAddress is normalized by SDK to remove duplicated/noisy fields.
  • Invoice responses intentionally exclude user/userData profile objects.

Use products.get() for product images, categories, and full product attributes. Retrieve paid-order downloads through Orders.

Invoice line attributes are returned as invoice.items[].attributes using the shared ProductAttribute shape. A color value may be a ProductAttributeValueObject with fieldType: 'color' and a hex payload in value.extra; use its nested value for the human-readable label.

Methods

Get

Use: invoices.get(options?).

Returns current invoice using stored cart + invoice credentials.

ParameterTypeRequiredDescription
optionsRequestOptionsOptionalPer-request controls.
const invoiceRes = await client.invoices.get();

Create

Use: invoices.create(options?).

Creates invoice from current cart credentials.

ParameterTypeRequiredDescription
optionsRequestOptionsOptionalPer-request controls.
await client.cart.addItem(12001, 1);
const invoiceRes = await client.invoices.create();

Refresh

Use: invoices.refresh(options?).

Syncs invoice with cart state.

await client.cart.addItem(12009, 1);
const refreshedInvoice = await client.invoices.refresh();

Add Shipping Address

Use: invoices.addShippingAddress(shippingAddressId, shippingAddressIdentifier, options?).

ParameterTypeRequiredDescription
shippingAddressIdnumberRequiredShipping address ID.
shippingAddressIdentifierstringRequiredShipping address identifier.
optionsRequestOptionsOptionalPer-request controls.
const addressRes = await client.shipping.createAddress({
  firstName: 'John',
  lastName: 'Doe',
  regionId: 1,
  cityId: 10,
  address: 'No. 10, Example St',
});

if (addressRes.data) {
  await client.invoices.addShippingAddress(
    addressRes.data.id,
    addressRes.data.identifier
  );
}

Add Discount Code

Use: invoices.addDiscountCode(code, options?).

ParameterTypeRequiredDescription
codestringRequiredDiscount code (uppercased by SDK).
optionsRequestOptionsOptionalPer-request controls.

Returns: SazitoResponse<Invoice>.

const res = await client.invoices.addDiscountCode('WELCOME10');
if (res.error) {
  // Invalid / expired code — show res.error.message to the user.
  console.warn(res.error.message); // e.g. "کد تخفیف معتبر نیست"
}

When a code is invalid or expired, use res.error.message for the user-facing error. The SDK returns:

FieldTypeNotes
messagestringLocalized message, ready to display (e.g. کد تخفیف معتبر نیست).
type'api'Invalid/expired code is an API error.
statusnumberHTTP response status.
detailsJsonValueAdditional error details.

Assign Shipping Method

Use: invoices.assignShippingMethod(shippings, options?).

FieldTypeRequiredDescription
shippings[].rateIdnumberRequiredShipping rate ID.
shippings[].invoiceItemIdsArray<string | number>RequiredInvoice item IDs covered by this rate.
optionsRequestOptionsOptionalPer-request controls.
const shippingMethodsRes = await client.invoices.getApplicableShippingMethods();
const assignments = shippingMethodsRes.data?.itemsShippingRate.map((entry) => ({
  rateId: entry.shippingRate.id,
  invoiceItemIds: [entry.invoiceItemId],
})) ?? [];

if (assignments.length > 0) {
  await client.invoices.assignShippingMethod(assignments);
}

Add Details

Use: invoices.addDetails(comment, options?).

ParameterTypeRequiredDescription
commentstringRequiredCustomer comment for invoice.
optionsRequestOptionsOptionalPer-request controls.
await client.invoices.addDetails('Please deliver between 14:00 and 16:00');

Add Form

Use: invoices.addForm(input, options?).

Adds checkout dynamic form values to the invoice. This is invoice-level checkout form data, not product form answers and not booking schedule fields.

FieldTypeRequiredDescription
input.formAttributesRecord<string, any>RequiredCheckout-level form payload (for invoice-level fields such as legal or delivery form steps).
input.identifierstringOptionalExplicit invoice identifier override.
optionsRequestOptionsOptionalPer-request controls.
await client.invoices.addForm({
  identifier: 'invoice-identifier-if-needed',
  formAttributes: {
    nationalCode: '0012345678',
    agreeToTerms: true,
  },
});

Get Applicable Shipping Methods

Use: invoices.getApplicableShippingMethods(options?).

Returns: SazitoResponse<ApplicableShippingMethods>.

const shippingRatesRes = await client.invoices.getApplicableShippingMethods();

Add Credit

Use: invoices.addCredit(options?).

Applies wallet credit to the current invoice. In most shops this flow requires authenticated user context.

await client.invoices.addCredit();

Remove Credit

Use: invoices.removeCredit(options?).

Removes wallet credit from the current invoice.

await client.invoices.removeCredit();

Toggle Credit

Use: invoices.toggleCredit(options?).

Toggles wallet credit based on current invoice.creditTotal.

await client.invoices.toggleCredit();

Clear Invoice

Use: invoices.clearInvoice().

Clears persisted invoice credentials only.

client.invoices.clearInvoice();

Invoice key fields

FieldTypeRequiredDescription
idnumberRequiredInvoice ID.
identifierstringRequiredInvoice identifier token.
itemsInvoiceItem[]RequiredInvoice items.
shippingAddressInvoiceShippingAddressOptionalSelected address.
shippingItemsShippingItem[]RequiredShipping assignments.
netTotalnumberRequiredNet invoice total.
finalTotalnumberRequiredFinal checkout total.
creditTotalnumberRequiredApplied wallet credit amount.
discountCodestringOptionalApplied discount code.

For user profile data, use users.getCurrentUser() instead of relying on invoice payloads.

Known errors

TypeWhen it happens
validationMissing cart/invoice credentials for dependent steps.
apiInvalid or expired discount code (addDiscountCode); error.message carries the server text.

Examples

// app/lib/sazito-client.ts
import { createSazitoClient } from '@sazito/client-sdk';

export const sazito = createSazitoClient({
  domain: process.env.NEXT_PUBLIC_SAZITO_DOMAIN!,
});
// app/[lang]/(home)/page.tsx
'use client';
import { useEffect, useState } from 'react';
import { sazito } from '@/app/lib/sazito-client';

export default function Example() {
  const [data, setData] = useState<any>(null);

  useEffect(() => {
    (async () => {
      await sazito.cart.addItem(12001, 1);
      const res = await sazito.invoices.create();
      setData(res.data ?? null);
    })();
  }, []);

  return <pre>{JSON.stringify(data, null, 2)}</pre>;
}

Type Details

The following tables are generated from SDK TypeScript types and include nested object fields.

ShippingAssignment

Source: src/types/shipping.ts

FieldTypeRequired
rateIdnumberRequired
invoiceItemIdsArray<string | number>Required

ApplicableShippingMethods

Source: src/types/shipping.ts

FieldTypeRequired
shippingMethodsShippingMethod[]Required
groupedShippingRatesRecord<string, ShippingRate[]>Required
itemsShippingRateItemShippingRate[]Required

Invoice

Source: src/types/invoice.ts

FieldTypeRequired
idnumberRequired
identifierstringRequired
itemsInvoiceItem[]Required
shippingAddressInvoiceShippingAddressOptional
shippingItemsShippingItem[]Required
needsShippingbooleanRequired
userCommentstringOptional
netTotalnumberRequired
finalTotalnumberRequired
vatnumberRequired
vatPercentnumberRequired
itemsDiscountnumberRequired
discountTotalnumberRequired
customerProfitnumberRequired
customerProfitPercentagenumberRequired
itemsTotalRawPricenumberRequired
couponTotalnumberRequired
shippingTotalnumberRequired
creditTotalnumberRequired
discountUsagesArray<{ discountCode: { code: string; userSegment?: string; }; }>Required
discountUsages.[].discountCode{ code: string; userSegment?: string; }Required
discountUsages.[].discountCode.codestringRequired
discountUsages.[].discountCode.userSegmentstringOptional
coupon{ userSegment?: string; }Optional
coupon.userSegmentstringOptional
discountCodestringOptional

InvoiceItem

Source: src/types/invoice.ts

FieldTypeRequired
idnumber | stringRequired
productVariantIdnumberRequired
productIdnumberOptional
namestringRequired
urlstringOptional
attributesProductAttribute[]Required
productTypestringOptional
hasMaxOrderbooleanOptional
maxOrderQuantitynumberOptional
minOrderQuantitynumberOptional
imageImageOptional
quantitynumberRequired
unitPricenumberRequired
lineTotalnumberRequired
rawPricenumberRequired
customerProfitnumberRequired
commercialFilesJsonValueOptional
formAttributesRecord<string, FormAttributeValue> | InvoiceItemFormAttributesOptional
bookingAttributesSchedulerBookingAttributesOptional
formFieldsJsonObjectOptional

ProductAttribute

Source: src/types/common.ts

FieldTypeRequired
namestringRequired
valuestring | ProductAttributeValueObjectRequired

ProductAttributeValueObject

Source: src/types/common.ts

FieldTypeRequired
valuestringRequired
extrastringOptional
fieldTypestringOptional

ShippingItem

Source: src/types/invoice.ts

FieldTypeRequired
invoiceItemIdsArray<number | string>Required
rate{ id: number; name: string; price: number; icon?: string; color?: string; type?: string; }Required
rate.idnumberRequired
rate.namestringRequired
rate.pricenumberRequired
rate.iconstringOptional
rate.colorstringOptional
rate.typestringOptional

ShippingAddress

Source: src/types/invoice.ts

FieldTypeRequired
idnumberRequired
identifierstringRequired
firstNamestringRequired
lastNamestringRequired
mobilePhonestringOptional
phoneNumberstringOptional
emailstringOptional
regionShippingAddressRegionOptional
cityShippingAddressCityRequired
addressstringRequired
postalCodestringOptional
descriptionstringOptional
latitudenumberOptional
longitudenumberOptional
userSetCoordinatesBeforebooleanOptional

User

Source: src/types/invoice.ts

FieldTypeRequired
idnumberOptional
emailstringOptional
mobilePhonestringOptional
phoneNumberstringOptional
firstNamestringOptional
lastNamestringOptional
birthDatestringOptional

On this page