Skip to main content
Glama
types.ts23.5 kB
import { z } from 'zod'; // BTCPayServer API Response Types export const StoreSchema = z.object({ id: z.string(), name: z.string(), website: z.string().nullable().optional(), speedPolicy: z.string(), defaultCurrency: z.string(), invoiceExpiration: z.number(), monitoringExpiration: z.number(), paymentTolerance: z.number(), anyoneCanCreateInvoice: z.boolean(), requiresRefundEmail: z.boolean().optional(), checkoutFormId: z.string().optional(), lightningAmountInSatoshi: z.boolean(), lightningPrivateRouteHints: z.boolean(), onChainWithLnInvoiceFallback: z.boolean(), lazyPaymentMethods: z.boolean(), redirectAutomatically: z.boolean(), showRecommendedFee: z.boolean(), recommendedFeeBlockTarget: z.number(), defaultLang: z.string().nullable().optional() }); export const PaymentRequestSchema = z.object({ id: z.string(), storeId: z.string(), status: z.string(), created: z.string().optional().nullable(), amount: z.union([z.string(), z.number()]).optional().nullable(), currency: z.string(), title: z.string().optional().nullable(), description: z.string().optional().nullable(), expiryDate: z.union([z.string(), z.number()]).optional().nullable(), email: z.string().optional().nullable(), embeddedCSS: z.string().optional().nullable(), customCSSLink: z.string().optional().nullable(), allowCustomPaymentAmounts: z.boolean(), formId: z.string().optional().nullable(), referenceId: z.string().optional().nullable() }); export const UserSchema = z.object({ id: z.string(), email: z.string(), emailConfirmed: z.boolean(), requiresEmailConfirmation: z.boolean().optional(), created: z.union([z.string(), z.number()]).optional(), roles: z.array(z.string()), disabled: z.boolean().optional(), approved: z.boolean().optional(), name: z.string().optional().nullable(), imageUrl: z.string().optional().nullable() }); export const ApiKeySchema = z.object({ apiKey: z.string(), label: z.string().optional().nullable(), permissions: z.array(z.string()), userId: z.string().optional().nullable() }); export const WebhookSchema = z.object({ id: z.string(), enabled: z.boolean(), automaticRedelivery: z.boolean(), url: z.string(), authorizedEvents: z.object({ everything: z.boolean(), specificEvents: z.array(z.string()).optional().nullable() }), secret: z.string().optional().nullable() }); // Webhook Delivery Management export const WebhookDeliverySchema = z.object({ id: z.string(), timestamp: z.number(), httpCode: z.number().optional(), errorMessage: z.string().optional().nullable(), status: z.string() }); // Webhook Event Types export const WebhookEventSchema = z.object({ deliveryId: z.string(), webhookId: z.string(), originalDeliveryId: z.string().optional().nullable(), isRedelivery: z.boolean(), type: z.string(), timestamp: z.number(), storeId: z.string(), invoiceId: z.string().optional(), metadata: z.record(z.any()).optional(), // Invoice specific fields partiallyPaid: z.boolean().optional(), afterExpiration: z.boolean().optional(), paymentMethodId: z.string().optional(), payment: z.object({ id: z.string(), receivedDate: z.number(), value: z.string(), fee: z.string().optional(), status: z.string(), destination: z.string().optional() }).optional(), overPaid: z.boolean().optional(), manuallyMarked: z.boolean().optional(), // Payment request fields paymentRequestId: z.string().optional(), status: z.enum(["Completed", "Expired", "Pending"]).optional(), // Payout fields payoutId: z.string().optional(), pullPaymentId: z.string().optional(), payoutState: z.enum(["AwaitingApproval", "AwaitingPayment", "Cancelled", "Completed", "InProgress"]).optional() }); export const ServerInfoSchema = z.object({ version: z.string(), onion: z.string().optional().nullable(), supportedPaymentMethods: z.array(z.string()).optional().nullable(), fullySynced: z.boolean().optional().nullable(), syncStatus: z.array(z.object({ cryptoCode: z.string().optional().nullable(), nodeInformation: z.object({ blockCount: z.number().optional().nullable(), blockHash: z.string().optional().nullable(), headers: z.number().optional().nullable(), verificationProgress: z.number().optional().nullable(), isSynching: z.boolean().optional().nullable(), incrementalRelayFee: z.number().optional().nullable(), minRelayTxFee: z.number().optional().nullable(), estimatedSize: z.number().optional().nullable(), estimatedHeight: z.number().optional().nullable() }).optional().nullable() })).optional().nullable() }); export const AppSchema = z.object({ id: z.string(), appName: z.string(), storeId: z.string(), created: z.number().optional(), appType: z.string(), archived: z.boolean().optional() }); // App File Management export const FileInfoSchema = z.object({ id: z.string(), userId: z.string(), uri: z.string(), url: z.string(), originalName: z.string(), storageName: z.string(), created: z.number() }); // App Statistics export const SalesStatisticsSchema = z.object({ salesCount: z.number(), series: z.array(z.any()) }); export const TopItemStatisticsSchema = z.object({ itemCode: z.string(), title: z.string(), salesCount: z.number(), total: z.string(), totalFormatted: z.string() }); export const PayoutSchema = z.object({ id: z.string(), revision: z.number(), pullPaymentId: z.string(), date: z.string(), destination: z.string(), originalCurrency: z.string(), originalAmount: z.string(), payoutCurrency: z.string(), payoutAmount: z.string(), payoutMethodId: z.string(), state: z.enum(['AwaitingApproval', 'AwaitingPayment', 'Cancelled', 'Completed', 'InProgress']), paymentProof: z.record(z.any()).optional(), metadata: z.record(z.any()).optional() }); // Invoice Management export const InvoiceSchema = z.object({ id: z.string(), storeId: z.string(), amount: z.union([z.string(), z.number()]).optional().nullable(), currency: z.string(), type: z.string().optional(), checkoutLink: z.string().optional(), status: z.string(), additionalStatus: z.string().optional(), created: z.union([z.string(), z.number()]).optional(), expirationTime: z.union([z.string(), z.number()]).optional(), monitoringTime: z.union([z.string(), z.number()]).optional(), speedPolicy: z.string().optional(), rate: z.number().optional(), exceptionStatus: z.string().optional().nullable(), targetConfirmations: z.number().optional(), lowFeeDetected: z.boolean().optional(), invoiceTime: z.union([z.string(), z.number()]).optional(), expiration: z.union([z.string(), z.number()]).optional(), definitelyAcceptedHeight: z.number().optional().nullable(), automatedPayoutSuspended: z.boolean().optional(), addresses: z.record(z.string()).optional(), paymentMethods: z.array(z.any()).optional(), payments: z.array(z.any()).optional(), archived: z.boolean().optional(), receipts: z.array(z.any()).optional(), events: z.array(z.any()).optional(), metadata: z.record(z.any()).optional() }); // Pull Payment Management export const PullPaymentSchema = z.object({ id: z.string(), name: z.string().optional().nullable(), description: z.string().optional().nullable(), currency: z.string(), amount: z.string(), BOLT11Expiration: z.number().optional(), autoApproveClaims: z.boolean().optional(), archived: z.boolean().optional(), viewLink: z.string().optional(), startsAt: z.number().optional().nullable(), expiresAt: z.number().optional().nullable(), payoutMethods: z.array(z.string()).optional().nullable() }); // Boltcard Management export const BoltcardLinkSchema = z.object({ LNURLW: z.string(), version: z.number(), K0: z.string(), K1: z.string(), K2: z.string(), K3: z.string(), K4: z.string() }); // LNURL Details export const LNURLDetailsSchema = z.object({ lnurlBech32: z.string(), lnurlUri: z.string() }); // Payment Method Management export const PaymentMethodSchema = z.object({ paymentMethod: z.string(), cryptoCode: z.string(), destinationAddress: z.string().optional().nullable(), enabled: z.boolean(), additionalData: z.record(z.any()).optional() }); // Invoice Payment Method Details export const InvoicePaymentMethodSchema = z.object({ paymentMethodId: z.string(), currency: z.string(), destination: z.string().optional(), paymentLink: z.string().optional(), rate: z.string().optional(), paymentMethodPaid: z.string().optional(), totalPaid: z.string().optional(), due: z.string().optional(), amount: z.string().optional(), paymentMethodFee: z.string().optional(), payments: z.array(z.any()).optional(), activated: z.boolean().optional(), additionalData: z.record(z.any()).optional() }); // Invoice Refund Trigger Data export const RefundTriggerDataSchema = z.object({ paymentAmountThen: z.string(), paymentAmountNow: z.string(), invoiceAmount: z.string(), paymentCurrency: z.string(), paymentCurrencyDivisibility: z.number(), invoiceCurrencyDivisibility: z.number(), invoiceCurrency: z.string(), overpaidPaymentAmount: z.string().optional() }); // Lightning Network export const LightningInfoSchema = z.object({ nodeURIs: z.array(z.string()).optional(), blockHeight: z.number().optional(), alias: z.string().optional().nullable(), color: z.string().optional().nullable(), version: z.string().optional().nullable(), peersCount: z.number().optional(), activeChannelsCount: z.number().optional(), inactiveChannelsCount: z.number().optional(), pendingChannelsCount: z.number().optional() }); export const LightningInvoiceSchema = z.object({ id: z.string(), status: z.string(), bolt11: z.string(), paidAt: z.union([z.string(), z.number()]).optional().nullable(), expiresAt: z.union([z.string(), z.number()]), amount: z.union([z.string(), z.number()]), description: z.string().optional().nullable(), descriptionHash: z.string().optional().nullable(), preimage: z.string().optional().nullable(), paymentHash: z.string(), createdAt: z.union([z.string(), z.number()]) }); // Store User Management export const StoreUserSchema = z.object({ userId: z.string(), email: z.string(), role: z.string() }); // Point of Sale App export const PosAppSchema = z.object({ id: z.string(), appType: z.string(), name: z.string(), description: z.string().optional().nullable(), created: z.union([z.string(), z.number()]).optional(), storeId: z.string(), currency: z.string().optional(), template: z.string().optional(), amount: z.union([z.string(), z.number()]).optional().nullable(), buttonText: z.string().optional().nullable(), customCSS: z.string().optional().nullable(), embeddedCSS: z.string().optional().nullable(), notificationUrl: z.string().optional().nullable(), redirectUrl: z.string().optional().nullable(), redirectAutomatically: z.boolean().optional(), requiresRefundEmail: z.boolean().optional(), checkoutFormId: z.string().optional().nullable(), posData: z.string().optional().nullable() }); // Health Status export const HealthStatusSchema = z.object({ status: z.string(), errors: z.array(z.string()).optional() }); // Server Policies export const ServerPoliciesSchema = z.object({ unauthenticatedGreenfieldAccess: z.boolean().optional(), userRegistration: z.boolean().optional(), lockSubscription: z.boolean().optional(), discourageSearchEngines: z.boolean().optional(), checkForNewVersions: z.boolean().optional(), pluginPreReleases: z.boolean().optional(), experimentalFeatures: z.boolean().optional(), domainToAppMapping: z.array(z.any()).optional() }); // Store Rates & Exchange export const StoreRateSchema = z.object({ currencyPair: z.string(), bid: z.number().optional(), ask: z.number().optional(), rate: z.number() }); export const RateSourceSchema = z.object({ id: z.string(), name: z.string(), url: z.string().optional(), default: z.boolean().optional() }); export const RateConfigurationSchema = z.object({ spread: z.number().optional(), isCustomScript: z.boolean().optional(), effectiveScript: z.string().optional(), rateScript: z.string().optional(), preferredSource: z.string().optional() }); // Lightning Network Advanced export const LightningBalanceSchema = z.object({ onchain: z.object({ confirmed: z.string(), unconfirmed: z.string(), reserved: z.string() }).optional(), offchain: z.object({ opening: z.string(), local: z.string(), remote: z.string(), closing: z.string() }).optional() }); export const LightningChannelSchema = z.object({ remoteNode: z.string(), isPublic: z.boolean().optional(), isActive: z.boolean().optional(), capacity: z.string(), localBalance: z.string(), channelPoint: z.string() }); export const LightningPaymentSchema = z.object({ id: z.string(), status: z.string(), bolt11: z.string(), paymentHash: z.string(), preimage: z.string().optional().nullable(), createdAt: z.union([z.string(), z.number()]), totalAmount: z.string(), feeAmount: z.string().optional() }); export const LightningDepositSchema = z.object({ address: z.string(), paymentLink: z.string().optional() }); export const LightningHistogramSchema = z.object({ type: z.string(), balance: z.string(), series: z.array(z.string()), labels: z.array(z.number()) }); export const LightningAddressSchema = z.object({ username: z.string(), currencyCode: z.string().nullable(), min: z.string().nullable(), max: z.string().nullable(), invoiceMetadata: z.record(z.any()).nullable() }); export const LightningConnectRequestSchema = z.object({ nodeURI: z.string().nullable() }); export const LightningChannelRequestSchema = z.object({ nodeURI: z.string(), channelAmount: z.string(), feeRate: z.number().optional() }); export const LightningPayInvoiceRequestSchema = z.object({ BOLT11: z.string(), amount: z.string().nullable(), maxFeePercent: z.string().nullable(), maxFeeFlat: z.string().nullable(), sendTimeout: z.number().nullable() }); export const LightningCreateInvoiceRequestSchema = z.object({ amount: z.string(), description: z.string().nullable(), descriptionHashOnly: z.boolean().nullable(), expiry: z.number(), privateRouteHints: z.boolean().nullable() }); // Crowdfund App export const CrowdfundAppSchema = z.object({ id: z.string(), appType: z.string(), name: z.string(), description: z.string().optional().nullable(), created: z.union([z.string(), z.number()]).optional(), storeId: z.string(), title: z.string().optional(), enabled: z.boolean().optional(), enforceTargetAmount: z.boolean().optional(), startDate: z.union([z.string(), z.number()]).optional().nullable(), endDate: z.union([z.string(), z.number()]).optional().nullable(), targetCurrency: z.string().optional(), targetAmount: z.string().optional(), mainImageUrl: z.string().optional().nullable(), embeddedCSS: z.string().optional().nullable(), notificationUrl: z.string().optional().nullable(), tagline: z.string().optional().nullable(), perksTemplate: z.string().optional().nullable(), disqusEnabled: z.boolean().optional(), soundsEnabled: z.boolean().optional(), animationsEnabled: z.boolean().optional(), resetEveryAmount: z.string().optional().nullable(), resetEvery: z.string().optional().nullable(), displayPerksRanking: z.boolean().optional(), sortPerksByPopularity: z.boolean().optional() }); // Language & Permissions export const LanguageSchema = z.object({ code: z.string(), displayName: z.string() }); export const PermissionSchema = z.object({ name: z.string(), included: z.boolean().optional() }); // API Key Creation export const ApiKeyCreationSchema = z.object({ label: z.string().optional(), permissions: z.array(z.string()), userId: z.string().optional(), storeId: z.string().optional() }); // Configuration types export interface BTCPayServerConfig { baseUrl: string; apiKey: string; storeId?: string; } export type Store = z.infer<typeof StoreSchema>; export type PaymentRequest = z.infer<typeof PaymentRequestSchema>; export type User = z.infer<typeof UserSchema>; export type ApiKey = z.infer<typeof ApiKeySchema>; export type Webhook = z.infer<typeof WebhookSchema>; export type WebhookDelivery = z.infer<typeof WebhookDeliverySchema>; export type WebhookEvent = z.infer<typeof WebhookEventSchema>; export type ServerInfo = z.infer<typeof ServerInfoSchema>; export type App = z.infer<typeof AppSchema>; export type FileInfo = z.infer<typeof FileInfoSchema>; export type SalesStatistics = z.infer<typeof SalesStatisticsSchema>; export type TopItemStatistics = z.infer<typeof TopItemStatisticsSchema>; export type Payout = z.infer<typeof PayoutSchema>; export type Invoice = z.infer<typeof InvoiceSchema>; export type PullPayment = z.infer<typeof PullPaymentSchema>; export type BoltcardLink = z.infer<typeof BoltcardLinkSchema>; export type LNURLDetails = z.infer<typeof LNURLDetailsSchema>; export type PaymentMethod = z.infer<typeof PaymentMethodSchema>; export type InvoicePaymentMethod = z.infer<typeof InvoicePaymentMethodSchema>; export type RefundTriggerData = z.infer<typeof RefundTriggerDataSchema>; export type LightningInfo = z.infer<typeof LightningInfoSchema>; export type LightningInvoice = z.infer<typeof LightningInvoiceSchema>; export type StoreUser = z.infer<typeof StoreUserSchema>; export type PosApp = z.infer<typeof PosAppSchema>; export type HealthStatus = z.infer<typeof HealthStatusSchema>; export type ServerPolicies = z.infer<typeof ServerPoliciesSchema>; export type StoreRate = z.infer<typeof StoreRateSchema>; export type RateSource = z.infer<typeof RateSourceSchema>; export type RateConfiguration = z.infer<typeof RateConfigurationSchema>; export type LightningBalance = z.infer<typeof LightningBalanceSchema>; export type LightningChannel = z.infer<typeof LightningChannelSchema>; export type LightningPayment = z.infer<typeof LightningPaymentSchema>; export type LightningDeposit = z.infer<typeof LightningDepositSchema>; export type LightningHistogram = z.infer<typeof LightningHistogramSchema>; export type LightningAddress = z.infer<typeof LightningAddressSchema>; export type LightningConnectRequest = z.infer<typeof LightningConnectRequestSchema>; export type LightningChannelRequest = z.infer<typeof LightningChannelRequestSchema>; export type LightningPayInvoiceRequest = z.infer<typeof LightningPayInvoiceRequestSchema>; export type LightningCreateInvoiceRequest = z.infer<typeof LightningCreateInvoiceRequestSchema>; // Store Email Settings export const StoreEmailSettingsSchema = z.object({ from: z.string(), server: z.string(), port: z.number(), login: z.string(), disableCertificateCheck: z.boolean(), passwordSet: z.boolean(), password: z.string().nullable().optional() }); export const SendEmailRequestSchema = z.object({ email: z.string(), subject: z.string(), body: z.string() }); // Store Users export const StoreUserDetailsSchema = z.object({ id: z.string(), email: z.string(), name: z.string().nullable(), imageUrl: z.string().nullable(), invitationUrl: z.string().nullable(), emailConfirmed: z.boolean(), requiresEmailConfirmation: z.boolean(), approved: z.boolean(), requiresApproval: z.boolean(), created: z.number().nullable(), disabled: z.boolean(), roles: z.array(z.string()), userId: z.string().optional(), // Deprecated role: z.string().optional(), // Deprecated storeRole: z.string() }); // Store Wallet export const StoreWalletOverviewSchema = z.object({ balance: z.string(), unconfirmedBalance: z.string(), confirmedBalance: z.string() }); export const StoreWalletFeeRateSchema = z.object({ feerate: z.number() }); export const StoreWalletAddressSchema = z.object({ address: z.string(), keyPath: z.string(), paymentLink: z.string() }); export const StoreWalletTransactionSchema = z.object({ transactionHash: z.string(), comment: z.string().nullable(), amount: z.string(), blockHash: z.string().nullable(), blockHeight: z.string().nullable(), confirmations: z.string(), timestamp: z.number(), status: z.enum(["Confirmed", "Unconfirmed"]), labels: z.array(z.any()) }); export const StoreWalletUTXOSchema = z.object({ comment: z.string().nullable(), amount: z.string(), link: z.string(), outpoint: z.string(), timestamp: z.number(), keyPath: z.string(), address: z.string(), confirmations: z.number(), labels: z.array(z.any()) }); export const StoreWalletObjectSchema = z.object({ data: z.record(z.any()), links: z.array(z.any()).nullable(), type: z.string(), id: z.string() }); // Store Payout Processors export const StorePayoutProcessorSchema = z.object({ name: z.string(), friendlyName: z.string(), payoutMethods: z.array(z.string()) }); export const OnChainPayoutProcessorSchema = z.object({ payoutMethodId: z.string(), feeTargetBlock: z.number(), intervalSeconds: z.number(), threshold: z.string(), processNewPayoutsInstantly: z.boolean() }); export const LightningPayoutProcessorSchema = z.object({ payoutMethodId: z.string(), intervalSeconds: z.number(), cancelPayoutAfterFailures: z.number(), processNewPayoutsInstantly: z.boolean() }); export type CrowdfundApp = z.infer<typeof CrowdfundAppSchema>; export type Language = z.infer<typeof LanguageSchema>; export type Permission = z.infer<typeof PermissionSchema>; export type ApiKeyCreation = z.infer<typeof ApiKeyCreationSchema>; // Store-related types export type StoreEmailSettings = z.infer<typeof StoreEmailSettingsSchema>; export type SendEmailRequest = z.infer<typeof SendEmailRequestSchema>; export type StoreUserDetails = z.infer<typeof StoreUserDetailsSchema>; export type StoreWalletOverview = z.infer<typeof StoreWalletOverviewSchema>; export type StoreWalletFeeRate = z.infer<typeof StoreWalletFeeRateSchema>; export type StoreWalletAddress = z.infer<typeof StoreWalletAddressSchema>; export type StoreWalletTransaction = z.infer<typeof StoreWalletTransactionSchema>; export type StoreWalletUTXO = z.infer<typeof StoreWalletUTXOSchema>; export type StoreWalletObject = z.infer<typeof StoreWalletObjectSchema>; export type StorePayoutProcessor = z.infer<typeof StorePayoutProcessorSchema>; export type OnChainPayoutProcessor = z.infer<typeof OnChainPayoutProcessorSchema>; export type LightningPayoutProcessor = z.infer<typeof LightningPayoutProcessorSchema>; // Notification Schemas export const NotificationSchema = z.object({ id: z.string(), identifier: z.string(), type: z.string(), body: z.string(), storeId: z.string().optional().nullable(), link: z.string().optional().nullable(), createdTime: z.number(), seen: z.boolean() }); export const NotificationSettingSchema = z.object({ identifier: z.string(), name: z.string(), enabled: z.boolean() }); export const UpdateNotificationRequestSchema = z.object({ seen: z.boolean().optional().nullable() }); export const UpdateNotificationSettingsRequestSchema = z.object({ disabled: z.array(z.string()) }); // Notification Types export type Notification = z.infer<typeof NotificationSchema>; export type NotificationSetting = z.infer<typeof NotificationSettingSchema>; export type UpdateNotificationRequest = z.infer<typeof UpdateNotificationRequestSchema>; export type UpdateNotificationSettingsRequest = z.infer<typeof UpdateNotificationSettingsRequestSchema>;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Abhijay007/btcpayserver-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server