Skip to main content
npayload is launching soon.
npayloadDocs
Marketplace

Publishing to the marketplace

List your channels on the marketplace for other organizations to discover and subscribe

Publishing a channel to the marketplace makes it available for other organizations to discover and subscribe. You control pricing, visibility, and subscriber access while npayload handles delivery, billing, and usage tracking.

Why publish

  • Monetize your data. Turn event streams into revenue with flexible pricing models.
  • Expand your ecosystem. Reach new customers who are already on npayload.
  • Reduce support overhead. Schema documentation, sample data, and self-service subscriptions mean fewer integration support requests.

Prerequisites

Before publishing to the marketplace, you need:

  1. A verified organization with a completed profile (display name, logo, description).
  2. At least one active channel with messages flowing through it.
  3. An event catalogue schema attached to the channel (recommended but not required).

Organization verification typically completes within 24 hours. You can prepare your listing in draft while verification is in progress.

Creating a listing

A listing wraps a channel with metadata that helps consumers evaluate and subscribe.

import NPayload from '@npayload/node';

const npayload = new NPayload({ token: process.env.NPAYLOAD_TOKEN });

const listing = await npayload.marketplace.listings.create({
  channel: 'weather-alerts',
  title: 'Global Weather Alerts',
  description: 'Real-time severe weather alerts covering 200+ countries. Updated within 30 seconds of issuance.',
  category: 'iot',
  tags: ['weather', 'alerts', 'geospatial'],
  pricing: {
    model: 'flat-monthly',
    price: 49.99,
  },
  visibility: 'public',
  sampleData: [
    {
      key: 'alert-US-CA',
      payload: {
        type: 'severe-thunderstorm',
        region: 'US-CA',
        severity: 'warning',
        issuedAt: '2026-03-07T14:30:00Z',
      },
    },
  ],
});

Pricing models

ModelDescriptionBest for
FreeNo charge. Subscribers get full access.Community data, open APIs, developer adoption
Per-messageCharge per message deliveredHigh-volume data where usage varies widely
Flat monthlyFixed monthly subscription feePredictable pricing, premium data feeds
Usage-basedTiered pricing based on monthly message volumeScaling with consumer growth
// Free
{ model: 'free' }

// Per-message
{ model: 'per-message', unitPrice: 0.001 }

// Flat monthly
{ model: 'flat-monthly', price: 99.00 }

// Usage-based tiers
{
  model: 'usage-based',
  tiers: [
    { upTo: 10000, unitPrice: 0.001 },
    { upTo: 100000, unitPrice: 0.0005 },
    { upTo: null, unitPrice: 0.0002 },  // unlimited
  ],
}

Visibility controls

VisibilityDescription
PublicListed in search results and browsable by all organizations
UnlistedAccessible only via direct link. Does not appear in search results
Invite-onlyOnly organizations you explicitly invite can view or subscribe
// Change visibility after creation
await npayload.marketplace.listings.update(listing.id, {
  visibility: 'invite-only',
});

// Invite a specific organization
await npayload.marketplace.listings.invite(listing.id, {
  orgId: 'org_partner_abc',
});

Documentation requirements

Well-documented listings attract more subscribers. Include:

RequirementRequired?Description
DescriptionYesClear explanation of what the channel provides
CategoryYesPrimary category for search and discovery
SchemaRecommendedEvent catalogue schema describing the message format
Sample dataRecommendedRepresentative messages so consumers can evaluate the format
SLAOptionalUptime commitment, maximum latency, and support response time
// Attach a schema from the event catalogue
await npayload.marketplace.listings.update(listing.id, {
  schemaId: 'sch_weather_alert_v2',
  sla: {
    uptimePercent: 99.9,
    maxLatencyMs: 500,
    supportResponseHours: 4,
  },
});

Managing subscribers

Monitor who is subscribed and control access.

// List all subscribers
const subscribers = await npayload.marketplace.listings.subscribers(listing.id);

// View usage for a specific subscriber
const usage = await npayload.marketplace.listings.subscriberUsage(listing.id, {
  subscriberOrgId: 'org_consumer_xyz',
  period: 'current-month',
});

// Revoke access
await npayload.marketplace.listings.revokeSubscriber(listing.id, {
  subscriberOrgId: 'org_consumer_xyz',
  reason: 'Terms of service violation',
});

Revoking a subscriber immediately stops message delivery. The subscriber will receive a notification with the reason you provide.

Best practices

  1. Write a clear description. Lead with what the data is and who it is for, not how it works internally.
  2. Provide sample data. Consumers evaluate listings based on real examples. Include at least 3 representative messages.
  3. Set an SLA. Even a modest uptime commitment (99%) signals reliability.
  4. Respond to reviews. Engaged publishers build trust and rank higher in search results.
  5. Version carefully. Use the event catalogue to version your schema so existing subscribers are not affected by format changes.
  6. Monitor usage. Track subscriber growth and message volumes to anticipate capacity needs.

Next steps

Was this page helpful?

On this page