Putiikkipalvelu Docs
SDK

Store Config

Fetch store configuration using the Storefront SDK

Overview

The store resource provides methods for fetching store configuration, including business info, SEO settings, payment methods, campaigns, and feature flags.

Methods

store.getConfig(options?)

Fetch the complete store configuration.

const config = await storefront.store.getConfig();

Options:

OptionTypeDescription
signalAbortSignalCancel the request
cacheRequestCacheFetch cache mode
next.revalidatenumber | falseNext.js ISR revalidation time in seconds
next.tagsstring[]Next.js cache tags for on-demand revalidation

Returns: Promise<StoreConfig>

Response Structure

The StoreConfig object contains:

interface StoreConfig {
  store: StoreInfo;      // Business information
  seo: StoreSeo;         // SEO and social media
  payments: PaymentConfig;  // Payment methods
  campaigns: Campaign[];    // Active campaigns
  features: FeatureFlags;   // Feature toggles
}

StoreInfo

PropertyTypeDescription
idstringStore ID
namestringStore name
emailstringContact email
phonestringContact phone
addressstringStreet address
citystringCity
postalCodestringPostal code
countrystringCountry code (e.g., "FI")
currencystringCurrency code (e.g., "EUR")
currencySymbolstringCurrency symbol (e.g., "€")
defaultVatRatenumberDefault VAT rate
businessIdstringBusiness ID (Y-tunnus)
logoUrlstring | nullStore logo URL

StoreSeo

PropertyTypeDescription
seoTitlestring | nullDefault page title
seoDescriptionstring | nullDefault meta description
domainstring | nullStore domain URL
openGraphImageUrlstring | nullOpen Graph image
twitterImageUrlstring | nullTwitter card image
instagramUrlstring | nullInstagram profile URL
facebookUrlstring | nullFacebook page URL
priceRangestring | nullPrice range indicator
businessTypestring | nullBusiness type for structured data

PaymentConfig

PropertyTypeDescription
methodsstring[]Active payment methods (e.g., ["stripe", "paytrail"])
defaultVatRatenumberDefault VAT rate for payments

FeatureFlags

PropertyTypeDescription
wishlistEnabledbooleanWishlist feature enabled
guestCheckoutEnabledbooleanGuest checkout allowed
newsletterEnabledbooleanNewsletter signup enabled
reviewsEnabledbooleanProduct reviews enabled

Campaign

PropertyTypeDescription
idstringCampaign ID
namestringCampaign name
descriptionstring | nullCampaign description
type"FREE_SHIPPING" | "BUY_X_PAY_Y"Campaign type
startDatestringCampaign start date
endDatestring | nullCampaign end date
isActivebooleanWhether campaign is active
FreeShippingCampaignobject | nullFree shipping details
BuyXPayYCampaignobject | nullBuy X Pay Y details

Examples

Basic Usage

import { storefront } from '@/lib/storefront';

const config = await storefront.store.getConfig();

console.log(config.store.name);        // "My Store"
console.log(config.seo.seoTitle);      // "My Store - Quality Products"
console.log(config.payments.methods);  // ["stripe", "paytrail"]

With Next.js Caching

// Cache for 5 minutes (recommended for store config)
const config = await storefront.store.getConfig({
  next: { revalidate: 300 }
});

Using with React Cache

import { cache } from 'react';
import { storefront } from '@/lib/storefront';

export const getStoreConfig = cache(async () => {
  return storefront.store.getConfig({
    next: { revalidate: 300 }
  });
});

Accessing Active Campaigns

const config = await storefront.store.getConfig();

// Find free shipping campaign
const freeShipping = config.campaigns.find(
  c => c.type === 'FREE_SHIPPING'
);

if (freeShipping?.FreeShippingCampaign) {
  const minSpend = freeShipping.FreeShippingCampaign.minimumSpend / 100;
  console.log(`Free shipping on orders over €${minSpend}`);
}

// Find buy X pay Y campaign
const buyXPayY = config.campaigns.find(
  c => c.type === 'BUY_X_PAY_Y'
);

if (buyXPayY?.BuyXPayYCampaign) {
  const { buyQuantity, payQuantity } = buyXPayY.BuyXPayYCampaign;
  console.log(`Buy ${buyQuantity}, pay for ${payQuantity}!`);
}

SEO Metadata

import { Metadata } from 'next';
import { getStoreConfig } from '@/lib/actions/storeConfigActions';

export async function generateMetadata(): Promise<Metadata> {
  const config = await getStoreConfig();

  return {
    title: config.seo.seoTitle || config.store.name,
    description: config.seo.seoDescription,
    openGraph: {
      images: config.seo.openGraphImageUrl ? [config.seo.openGraphImageUrl] : [],
    },
  };
}

Error Handling

import { NotFoundError, AuthError } from '@putiikkipalvelu/storefront-sdk';

try {
  const config = await storefront.store.getConfig();
} catch (error) {
  if (error instanceof AuthError) {
    // Invalid API key
    console.error('Check your STOREFRONT_API_KEY');
  }
  if (error instanceof NotFoundError) {
    // Store not found
    console.error('Store does not exist');
  }
  throw error;
}

On this page