Partner API

Submit your customers' products to Noonlaunch straight from your own platform. Authenticate with your partner token, send the product once, hand over a checkout link with your discount already applied, and track the listing until it is live.

The API is JSON over HTTPS. Send Accept: application/json on every request. The maker named in a submission always ends up owning the listing: once it goes live they receive an email with their launch page and a link to claim their Noonlaunch account.

Download the Postman collection All three requests, ready to send: set the base_url and partner_token collection variables and go.
Quick start
curl https://noonlaunch.com/api/v1/meta \
  -H "Authorization: Bearer nl_pat_XXXX" \
  -H "Accept: application/json"
A submission's life
awaiting_payment Paid submission created; the checkout has not been completed yet. in_review Free submission waiting for the Noonlaunch team's review. live Approved and public; live_url points to the listing.

Authentication

Partner tokens are issued personally by the Noonlaunch team and start with nl_pat_. Send yours as a bearer header on every request. Your token is your identity, your quota and your discount in one string, so keep it server-side and out of client code, repositories and logs.

We store only a hash of it. If it leaks, tell us and we rotate it: the old token stops working the same second, and requests with it return 401.

Request headers
Authorization: Bearer nl_pat_XXXXXXXXXXXXXXXXXXXX
Accept: application/json
Content-Type: application/json

Errors

Errors are JSON with a human-readable message; validation failures add an errors object keyed by field. Nothing is ever partially created: a failed request stores nothing.

401
Unauthorized Missing, wrong or revoked token.
422
Validation failed Field errors arrive in the standard errors object. Also covers a maker who is out of free launches, and a free launch_week that is already full.
429
Over the limit Monthly quota reached (the body carries quota and used), or more than 30 requests in a minute.
502
Checkout unavailable The payment provider could not create a checkout. Nothing was stored; retry the same request.
422 · validation failed
{
  "message": "The tagline field must be at least 10 characters.",
  "errors": {
    "tagline": [
      "The tagline field must be at least 10 characters."
    ]
  }
}
429 · quota reached
{
  "message": "Monthly submission quota reached.",
  "quota": 100,
  "used": 100
}

Get the catalog

GET /meta

One call returns everything needed to build a submission: your own standing (partner: monthly quota, usage, discount), the plan catalog with live prices, the launch calendar, and the category list. Read it instead of hardcoding any of these. Three of its values feed straight into POST /submissions:

plans[].slug is what you send as plan e.g. "bundle_featured" launch_weeks[].start is what you send as launch_week e.g. "2026-09-14" categories[].slug is what you send as category e.g. "ai-tools"

launch_weeks lists only weeks that still have free-launch slots, soonest first. Paid plans have no weekly cap: they may use any Monday within the next 24 weeks, listed or not. And launch_week is optional either way; leave it out and we schedule the next available week automatically. Quotas reset on the first of the month.

free Standard launch $0 once
Nofollow backlink. Goes live after the Noonlaunch team reviews it.
bundle_featured Premium Launch $11 once
Dofollow backlink. Goes live automatically once the checkout is paid.
bundle_spotlight Spotlight Launch $49 once
Dofollow backlink. Goes live automatically once the checkout is paid.

Free submissions share the weekly launch capacity with every other free launch, and each maker has a lifetime allowance of 2 free launches. Paid submissions skip both limits.

200 · response (weeks and categories truncated)
{
    "partner": {
        "name": "AI Directories",
        "monthly_quota": 100,
        "used_this_month": 12,
        "remaining_this_month": 88,
        "discount": "25% off"
    },
    "plans": [
        {
            "slug": "free",
            "name": "Standard launch",
            "price_usd": 0,
            "dofollow": false,
            "approval": "manual_review"
        },
        {
            "slug": "bundle_featured",
            "name": "Premium Launch",
            "price_usd": 11,
            "dofollow": true,
            "approval": "on_payment"
        },
        {
            "slug": "bundle_spotlight",
            "name": "Spotlight Launch",
            "price_usd": 49,
            "dofollow": true,
            "approval": "on_payment"
        }
    ],
    "launch_weeks": [
        {
            "start": "2026-09-14",
            "week_number": 38,
            "free_slots_remaining": 7
        },
        {
            "start": "2026-09-21",
            "week_number": 39,
            "free_slots_remaining": 20
        }
    ],
    "categories": [
        {
            "id": 1,
            "slug": "ai-tools",
            "name": "AI Tools"
        },
        {
            "id": 2,
            "slug": "developer-tools",
            "name": "Developer Tools"
        }
    ]
}

Create a submission

POST /submissions

Creates the listing and, for paid plans, a checkout. The response splits by plan: paid returns a checkout_url to open (your discount is locked in and cannot be replaced at checkout; payment approves the listing automatically), free enters our review queue with no payment step.

Pass success_url so the payer returns to your portal after paying, where you can show your own confirmation and poll the submission until it is live.

Body parameters
website_url required The product's site. Resubmitting a URL you already have awaiting payment or review updates that submission in place (returning 200 and, for paid, a fresh checkout link), so an abandoned checkout never blocks a retry. A site that is already listed can only be relaunched on a paid plan, never free again.
name required 2-100 characters.
tagline required 10-70 characters, one line.
description required 30-600 characters.
category required The slug (or id) of a category from the categories list in /meta, e.g. "ai-tools".
maker_email required The maker who owns the listing. We create their account if needed and email them once the listing is live.
plan required A slug from the plan catalog.
launch_week optional The start date of a week from /meta, as YYYY-MM-DD (always a Monday), e.g. "2026-09-14". Never the week_number. Omit it and we pick the next available week for you.
success_url optional Where the payer lands on your portal after a successful checkout. Strongly recommended for paid plans; without it they land on noonlaunch.com. Ignored for free.
return_url optional Where the payer lands if they back out of the checkout without paying.
logo_url optional Public image URL; we fetch and host it.
screenshots optional Up to 4 public image URLs, shown as the product's gallery in the order given. One that fails to download is skipped, never blocking the submission.
maker_name optional Used for the maker's account.
twitter_handle optional With or without the @.
Request
curl -X POST https://noonlaunch.com/api/v1/submissions \
  -H "Authorization: Bearer nl_pat_XXXX" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "website_url": "https://example-tool.com",
    "name": "Example Tool",
    "tagline": "One line that says what it does",
    "description": "What it does, who it is for, and why it beats doing it by hand.",
    "category": "ai-tools",
    "maker_email": "maker@example-tool.com",
    "plan": "bundle_featured"
  }'
201 · paid plan
{
  "id": 123,
  "status": "awaiting_payment",
  "checkout_url": "https://polar.sh/checkout/…",
  "launch_week": "2026-09-14"
}
201 · free plan
{
  "id": 124,
  "status": "in_review",
  "checkout_url": null,
  "launch_week": "2026-09-14"
}

Retrieve a submission

GET /submissions/{id}

Returns the current state of one of your submissions. You only ever see your own; anything else is a 404. Poll it after payment or while a free submission is in review.

Status values
awaiting_payment Paid submission created; the checkout has not been completed yet.
in_review Free submission waiting for the Noonlaunch team's review.
live Approved and public; live_url points to the listing.
rejected Did not pass review.
200 · response
{
  "id": 123,
  "name": "Example Tool",
  "status": "live",
  "launch_week": "2026-09-14",
  "live_url": "https://noonlaunch.com/product/example-tool",
  "created_at": "2026-09-09T12:00:00+05:30"
}
Want to become a partner?

Partner access is set up personally: we agree on a quota and a discount for your audience, then hand you your token. If you run a directory, a launch platform or a maker community, reach out to the Noonlaunch team and mention the partner program.