Launch and track

Preview a launch, spend 1 launch on the directories a project qualifies for, and follow each listing until it is live.

What you'll build

A launched project, and the reads that tell you where each listing stands: which ones are live and where, which ones wait on you or your client, and which ones the directory turned down. Most listings go live within a week, and in test mode within about 15 minutes.

Before you start

  • A project that is ready. Its readiness.ready is true: see Onboard a client's product.
  • 1 launch on your balance. A live launch is one you bought; test mode starts with 100 test launches.

A live launch cannot be undone. A launch that fails spends nothing.

1. Check your balance

GET /account shows the launches you have, and how many listings run across all your projects.

curl https://api.submitator.com/v1/account \
  -H "Authorization: Bearer $SUBMITATOR_API_KEY"
Response 200 (some fields left out)
{
  "object": "account",
  "livemode": false,
  "state": "active",
  "launches": { "available": 97, "used": 3, "total": 100 },
  "capacity": { "in_flight": 25, "limit": 100 }
}

Up to capacity.limit listings run at once across your projects. Above it, new listings wait in pending and start as others finish; a launch is accepted either way.

2. Preview the launch

GET /projects/{project_id}/readiness is free: it shows how many directories a launch would get now, their top and median Domain Rating, and what it costs.

curl https://api.submitator.com/v1/projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP/readiness \
  -H "Authorization: Bearer $SUBMITATOR_API_KEY"
Response 200 (some fields left out)
{
  "object": "readiness",
  "ready": true,
  "directories": { "selected": 87, "limit": 100, "top_domain_rating": 92, "median_domain_rating": 48 },
  "unlocks": [
    { "requirement": "badge", "directories": 9, "how": "Install the badge on https://ledgerly.test and verify it." }
  ],
  "cost": { "launches": 1, "available": 97 }
}

The numbers follow the catalog and can change from one hour to the next. Directories that unlocks names can be added after the launch too, so you do not need to wait for them.

3. Launch

"auto" takes the directories the project qualifies for, up to 100. To choose yourself, send {"include": [...]} with the directories to use, or {"exclude": [...]} with the ones to skip.

curl https://api.submitator.com/v1/projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP/launch \
  -H "Authorization: Bearer $SUBMITATOR_API_KEY" \
  -H "Idempotency-Key: crm_8812-launch" \
  -H "Content-Type: application/json" \
  -d '{"directories": "auto"}'
Response 202 (some fields left out)
{
  "object": "project",
  "id": "prj_4QzX1m9Lr2Vb7Nc8Tk3HwP",
  "status": "in_progress",
  "launched_at": "2026-10-03T14:05:40Z",
  "allowance": { "total": 100, "used": 0, "reserved": 87, "available": 13 },
  "progress": { "total": 87, "pending": 87, "in_progress": 0, "action_required": 0, "submitted": 0, "live": 0, "not_accepted": 0, "cancelled": 0 }
}

With the Idempotency-Key, a launch you send twice after a timeout runs once. A second launch of the same project, with another key, returns 409 already_launched.

4. Follow the project

The project's status and progress sum up its listings. Read it, or follow the project.* events, to learn about changes.

curl https://api.submitator.com/v1/projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP \
  -H "Authorization: Bearer $SUBMITATOR_API_KEY"
Response 200 (some fields left out)
{
  "object": "project",
  "id": "prj_4QzX1m9Lr2Vb7Nc8Tk3HwP",
  "status": "action_required",
  "action": {
    "code": "install_badge",
    "waiting_on": "client",
    "client_message": "Please add the directory badges block to https://ledgerly.test. 9 directories list Ledgerly once their badges show on the site."
  },
  "progress": { "total": 96, "pending": 0, "in_progress": 5, "action_required": 9, "submitted": 8, "live": 70, "not_accepted": 3, "cancelled": 1 }
}
statusWhat to do
in_progressNothing: listings are moving.
action_requiredFollow action: waiting_on says whether it is you or your client.
on_holdNothing for hold_reason review, which clears by itself; write to support for paused.
completedNothing is left to run. Listings in submitted can still go live.

5. List the listings

Each directory has one listing. Filter by status to see the live ones with their links, or the ones that need someone.

curl "https://api.submitator.com/v1/projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP/listings?status=live&limit=100" \
  -H "Authorization: Bearer $SUBMITATOR_API_KEY"
One listing from the response
{
  "object": "listing",
  "id": "lst_7Hk2Qn4Rt9Vx1Bm6Cz3LdK",
  "directory": { "id": "dir_2Lm8Wq3Zk7Rt1Xc5Vb9NdF", "name": "BetaList", "domain_rating": 73 },
  "status": "live",
  "reason": null,
  "action": null,
  "live_url": "https://betalist.com/startups/ledgerly",
  "proof_url": "https://feed.example.net/a/Pf8Kq2Wm.t6Lx9",
  "live_at": "2026-10-08T14:00:00Z"
}

A listing in not_accepted carries a reason: declined, unavailable or removed. Its place in the allowance comes back, and auto-replace or Reach more directories can use it.

Where a directory needed an account, GET /projects/{project_id}/logins lists the login created there for your client: where it signs in, its email and username, whether it is ready, and the project's one password. For a confirmation code or a password reset link, GET /listings/{listing_id}/emails returns the emails the directory sent to the login, unless they go to your client's own address. See Logins.

6. Act on what waits for someone

A listing or project in action_required has an action. The two codes today:

  • install_badge waits on your client. Forward client_message as it is, then verify the badge: Install the badge.
  • add_assets waits on you. Add the missing logo or screenshot, and the listings move on.

New codes can appear. For a code you do not know, show client_message, or a general prompt when it is null.

Check it worked

  • GET /projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP shows a launched_at time and a progress.total above 0.
  • GET /events?project=prj_4QzX1m9Lr2Vb7Nc8Tk3HwP starts with project.launched.
  • GET /account shows 1 more launch in launches.used.

What can go wrong

CodeStatusFix
not_ready422The project misses a logo, a screenshot or the contact email; errors lists them. Nothing was spent.
no_launches_left402Your balance is 0. Buy launches in the console, then send the same request again.
already_launched409The project launched before. Add directories with POST /projects/{project_id}/listings instead.
nothing_to_submit422No directory fits the project now. Check unlocks and not_matching in the preview. Nothing was spent.

Next steps