ShipPulse
  • Pricing
  • Docs
  • Blog
  • Compare

Product

TestimonialsChangelogStatus PagesFeedbackRoadmapPricing

Resources

DocsBlogAPI ReferenceSDKHelp Center

Company

AboutContact

Legal

TermsPrivacyCookie PolicyDPASub-processors

Product updates

Changelog updates only. Unsubscribe any time.

ShipPulse operated by Igor Bogdanov, Limassol, Cyprus. [email protected]. Cyprus registration number pending — will be published once issued.

ShipPulse

© 2026 ShipPulse. All rights reserved.

OverviewQuick StartCore ConceptsWidget ReferencePlatform GuidesAPI ReferenceAPI PlaygroundError HandlingPaginationRate LimitingJavaScript SDKWebhooksZapier, n8n & MakeCustom DomainsTeam ManagementBilling & PlansNotification ChannelsAI FeaturesOverviewFrom SenjaFrom Testimonial.toFrom HeadwayFrom Canny

Introduction

  • Overview
  • Quick Start
  • Core Concepts

Embed Widgets

  • Widget Reference
  • Platform Guides

REST API

  • API Reference
  • API Playground
  • Error Handling
  • Pagination
  • Rate Limiting

SDK & Webhooks

  • JavaScript SDK
  • Webhooks
  • Zapier, n8n & Make

Guides

  • Custom Domains
  • Team Management
  • Billing & Plans
  • Notification Channels
  • AI Features

Migrations

  • Overview
  • From Senja
  • From Testimonial.to
  • From Headway
  • From Canny

Need help?

[email protected]
Docs / SDK Reference

SDK Reference

Official client libraries for integrating ShipPulse into your application.


@shippulse/js

Core SDK — works in any JavaScript environment (browser, Node.js, Deno, Bun).

Installation

bash
npm install @shippulse/js

Quick start

typescript
import { ShipPulse } from "@shippulse/js";

const sp = new ShipPulse({ apiKey: "sp_live_..." });

// List testimonials
const testimonials = await sp.testimonials.list({ status: "approved" });

// Create a changelog entry
await sp.changelog.create({
  title: "Dark mode is here",
  body: "<p>We shipped dark mode for all widgets.</p>",
  type: "feature",
  published: true,
});

// Get monitors
const monitors = await sp.monitors.list();

API

ModuleMethods
sp.testimonialslist(), get(id), create(data), update(id, data), delete(id)
sp.changeloglist(), get(id), create(data), update(id, data), delete(id)
sp.monitorslist(), get(id), create(data), update(id, data), delete(id)
sp.incidentslist(), create(data), addUpdate(id, data)
sp.subscriberslist(), add(email), remove(id)
sp.widgetslist()

@shippulse/react

React hooks and components for embedding ShipPulse data in React/Next.js applications.

Installation

bash
npm install @shippulse/react @shippulse/js

Provider setup

tsx
import { ShipPulseProvider } from "@shippulse/react";

function App({ children }) {
  return (
    <ShipPulseProvider apiKey="sp_live_...">
      {children}
    </ShipPulseProvider>
  );
}

Hooks

tsx
import { useTestimonials, useChangelog, useMonitors } from "@shippulse/react";

function Wall() {
  const { data, isLoading, error } = useTestimonials({ status: "approved" });
  if (isLoading) return <p>Loading...</p>;
  return data.map((t) => <div key={t.id}>{t.content}</div>);
}

function ChangelogFeed() {
  const { data } = useChangelog({ limit: 10 });
  return data.map((e) => <article key={e.id}>{e.title}</article>);
}

function StatusBar() {
  const { data } = useMonitors();
  const allUp = data?.every((m) => m.current_status === "up");
  return <span>{allUp ? "All systems operational" : "Issues detected"}</span>;
}

Components

ComponentDescription
<ShipPulseProvider>Context provider — wrap your app with it
<TestimonialWall>Pre-built wall of love component
<ChangelogWidget>Sidebar/modal changelog widget

@shippulse/node

Server-side utilities for Node.js — webhook signature verification, server-side API calls.

Installation

bash
npm install @shippulse/node

Webhook verification

typescript
import { verifyWebhookSignature } from "@shippulse/node";

app.post("/webhooks/shippulse", (req, res) => {
  const isValid = verifyWebhookSignature(
    req.body,
    req.headers["x-shippulse-signature"],
    process.env.SHIPPULSE_WEBHOOK_SECRET
  );

  if (!isValid) return res.status(401).send("Invalid signature");

  const event = req.body;
  console.log("Event:", event.type, event.data);

  res.status(200).send("OK");
});

Server-side client

typescript
import { createServerClient } from "@shippulse/node";

const sp = createServerClient({ apiKey: process.env.SHIPPULSE_API_KEY });

// All methods from @shippulse/js are available
const approved = await sp.testimonials.list({ status: "approved" });