Node SDK

For Node based backends


A node package for MoonPay server-side functions. See the package here.


First, import the MoonPay class.

import { MoonPay } from '@moonpay/moonpay-node`;

Set up the MoonPay class with your secret key.


โš ๏ธ NEVER use your secret key in client side code. โš ๏ธ

Load your secret key from an environment variable instead.

const moonPay = new MoonPay('sk_test_...');


Use the moonPay instance to access our functions.

URL utilities

MoonPay URL utilities are namespaced under the .url property.

Signing your URL

If you include the walletAddress or walletAddresses query param, you'll need to sign the URL.

const signature = moonPay.url.generateSignature(

Or, return the signed URL, using the returnFullURL option.

const signedURL = moonPay.url.generateSignature(
  { returnFullURL: true },

Verifying a signature

Or, you can verify that a URL is correctly signed.

const isSignatureValid = moonPay.url.isSignatureValid(

Generating a signed URL

You can also have us generate the full, signed URL, based on some input parameters.

const params = {
  apiKey: 'pk_test_123',
  baseCurrencyCode: 'GBP',

const url = moonPay.url.generate({ flow: 'buy', params });


Here's an example of an Express endpoint that signs a URL query param.

import express from 'express'
import { MoonPay } from '@moonpay/moonpay-node';

const moonPay = new MoonPay('sk_test_...');
const app = express();

app.get('/moonpay_signature', (req, res) => {
  const { url } = req.query;
  const signature = moonPay.url.generateSignature(url);
  res.send({ signature });

app.listen(3000, () =>
  console.log('Listening on port 3000!'),

Then, make a GET request to your endpoint from the client with a url query param to get the signature.