---
title: "Submit your environment's listing for the public shelf [write]"
method: POST
path: "/environments/{id}/listing/submission"
tags: ["environments"]
---

# Submit your environment's listing for the public shelf \[write\]

`POST /environments/{id}/listing/submission`

## Request

- Base URL: `https://api.agentsky.dev/v1`
- URL: `https://api.agentsky.dev/v1/environments/{id}/listing/submission`
- Auth: HTTP bearer

Stores the listing and the environment as they are now and starts a smoke run, paid from your wallet: the platform's default engine starts a session on the environment, checks that every listed package is installed, and the session is deleted. A failed run sends the submission back with the failed checks as the reason; a passed one waits for a reviewer, whose approval makes the listing public. Answers 422 `not_submittable` naming what is missing, 409 `already_in_review` while an earlier submission is waiting, 404 when the shelf is not enabled for this workspace or the environment has no listing.

## Path parameters

- `id` string, required

## Request body

- object
  - `seller_name` string, required: The name the shelf shows as the maker: 2 to 60 characters, not an email address

## Response `201`

Submitted

- EnvironmentSubmissionState
  - `missing` string[], required: What still has to be true before it can be submitted, in words; empty when it can
  - `submission` object, nullable, required: The latest submission; null when it has never been submitted
    - `status` 'in_review' | 'approved' | 'sent_back' | 'withdrawn', required
    - `seller_name` string, required
    - `submitted_at` string, date-time, required
    - `decided_at` string, date-time, nullable, required
    - `reason` string, nullable, required: Why it was sent back: the reviewer's words, or the smoke run's failed checks
    - `conformance` object, nullable, required: The smoke run's verdict; null while it is still running
      - `required_passed` boolean, required: Every required check of the smoke run passed
      - `all_passed` boolean, required
      - `checked_at` string, date-time, required
  - `published` object, nullable, required: The approved version other workspaces read and install; null when it is not public
    - `seller_name` string, required
    - `approved_at` string, date-time, required
  - `taken_down` object, nullable, required: Set when a reviewer took the public listing down and nothing has been approved since
    - `at` string, date-time, required
    - `reason` string, nullable, required

## Other responses

- `default`: Error — { error: { code, message } }

## Changes

- **2026-11-02** `e5e8f0229a99`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/agentsky/apis/agentsky-developer-api/changes/environments/:id/listing/submission/post.md)

---

[API](https://skmtc.dev/agentsky/apis/agentsky-developer-api.md) - [All operations](https://skmtc.dev/agentsky/apis/agentsky-developer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/agentsky/apis/agentsky-developer-api/revisions/8280a065ef6a?raw)
