LayerCover

SDK Reference

Full API reference for @layercover/sdk

Complete API documentation for the @layercover/sdk package.


BuyCoverModal {#buycovermodal}

For full control over modal visibility with your own trigger UI:

import { useState } from 'react';
import { BuyCoverModal } from '@layercover/sdk/react';
import { ViemAdapter } from '@layercover/sdk';
import { useWalletClient } from 'wagmi';

function MyPage() {
  const [isOpen, setIsOpen] = useState(false);
  const { data: walletClient } = useWalletClient();
  const signer = walletClient ? ViemAdapter.fromWalletClient(walletClient) : undefined;

  return (
    <>
      <button onClick={() => setIsOpen(true)}>Buy Cover</button>

      <BuyCoverModal
        open={isOpen}
        onClose={() => setIsOpen(false)}
        signer={signer}
        poolId={1}
        deployment="avalanche_fuji_usdc"
        onSuccess={() => {
          setIsOpen(false);
          refetchPositions();
        }}
      />
    </>
  );
}
PropTypeRequiredDescription
openbooleanControls modal visibility
onClose() => voidCalled when modal is dismissed
signerSignerethers v6 signer
poolIdnumberTarget pool ID
availableBalancenumberUser token balance (display only)
onSuccess() => voidCallback on successful purchase
referralCodestringReferral code as bytes32 hex (0x + 64 hex chars)
themeThemeCustom theme
apiBaseUrlstringOverride API base URL
deploymentstringDeployment identifier such as avalanche_fuji_usdc

Headless SDK {#headless}

For complete control without UI components:

import { LayerCoverSDK } from '@layercover/sdk';

const sdk = await LayerCoverSDK.create(signer, {
  apiBaseUrl: 'https://app.layercover.com',
  deployment: 'base_sepolia_usdc',
  chainId: 84532,
});

Using wagmi/viem:

import { LayerCoverSDK, ViemAdapter } from '@layercover/sdk';

const signer = ViemAdapter.fromWalletClient(walletClient);
const sdk = await LayerCoverSDK.create(signer);

Fetching Quotes

const quotes = await sdk.getActiveQuotes(poolId);
const best = quotes[0] ?? null;

Purchasing Coverage

import { encodeBytes32String, parseUnits } from 'ethers';

const amount = parseUnits('1000', 6);
const referralCode = encodeBytes32String('YOUR_CODE');

const result = await sdk.purchase(poolId, amount, 4, undefined, referralCode);
console.log(result.txHash, result.policyId);

useLayerCover Hook

React hook for pool discovery, quotes, and purchases:

import { useLayerCover } from '@layercover/sdk/react';

function CoveragePanel({ signer, poolId }) {
const {
  quotes,
  bestRate,
  purchase,
  loading,
    error,
  } = useLayerCover({
    signer,
    poolId,
    apiBaseUrl: 'https://app.layercover.com',
    deployment: 'avalanche_fuji_usdc',
  });

  const handlePurchase = async () => {
    const result = await purchase('1000', 4);
    if (result) console.log(`Policy: ${result.policyId}`);
  };

  if (loading) return <div>Loading quotes...</div>;
  if (error) return <div>Error: {error}</div>;

  return (
    <div>
      <p>Best rate: {bestRate ?? 'N/A'} bps</p>
      <button onClick={handlePurchase}>Purchase</button>
      <p>Quotes: {quotes.length}</p>
    </div>
  );
}
Return ValueTypeDescription
quotesFixedRateQuote[]Active quotes for the selected pool
bestRatenumber | nullLowest rate in bps
purchase(amount, weeks) => Promise<PurchaseResult | null>Execute a purchase
loadingbooleanTrue while loading
errorstringHuman-readable error string

Contract Addresses

Fetch dynamic addresses/config from API:

const res = await fetch('https://app.layercover.com/api/config');
const config = await res.json();

console.log(config.contracts?.policyManager);
console.log(config.contracts?.intentMatcher ?? config.contracts?.intentOrderBook);
console.log(config.chainId, config.deployment);

Or see Contract Addresses for a static reference.


Need Help?