Update Creator Studio drop edits

Update an existing ERC-721 SeaDrop V1 drop and its stages. Only the collection owner can call it, and any other drop type returns 400.

Saves a Creator Studio draft. It does not change the live drop: SeaDrop stages are onchain contract state, so the draft has to be published separately before buyers see it. A 200 here means the draft was accepted, not that the drop changed.

stages replaces the whole set rather than merging, so send every stage the drop should end up with, including ones you are not changing. It is required even to change only max_supply or creator_payout_address. Reuse an existing stage uuid to update it, supply a new UUID to add one, and omit a stage to delete it. Every stage needs a label, and every price must be in the chain's native currency, with price.contract_address set to 0x0000000000000000000000000000000000000000.

A stage with a price above zero needs a creator payout address, the wallet that receives mint proceeds: SeaDrop reverts every paid mint while the contract has none. If the contract has no payout address yet, send creator_payout_address with the stages; a save with a paid stage and no payout address anywhere returns 400. Free stages need none.

Once minting has started, a save that raises max_supply or the price of the stage being minted from can be refused with 400. A drop whose supply or price is raised onchain during its mint is disabled.

The stage list has four rules, and rules 2 and 4 interact in a way worth reading before the first attempt:

  1. Exactly one stage must be public_sale.
  2. That public stage must be first in the array.
  3. The presales, meaning every stage after the first, must be contiguous among themselves: each one starts exactly when the previous presale ended. The first presale start time is not constrained.
  4. The last presale must end exactly when the public stage starts.

Together, 2 and 4 mean array order is not chronological order: the public stage is listed first and runs last, with the presales running in array order before it. A drop with two allowlist stages therefore sends [public, presale1, presale2] while time runs presale1, then presale2, then public. Rule 3 does not tie presale1 back to the public stage, which is why the chain reads forward from presale1 rather than from the array head.

Each stage's max_total_mintable_by_wallet is what that stage adds for a wallet, not a running total. Limits add up across the stages a wallet is listed on, the public stage adds its own limit on top, and mints a wallet leaves unused carry into later stages. So presales of 2 and 1 plus a public limit of 1 let a wallet on both lists mint 4.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

The collection slug identifying the drop to update

Body Params

Request to save Creator Studio drop edits

string | null

The wallet that receives mint proceeds, written to the contract on the next publish. Required when any stage has a price above zero and the contract has no payout address yet: SeaDrop reverts every paid mint while none is set, so such a save returns 400. Free drops can omit it. Each save replaces the drafted value, so a save that omits it drops any address an earlier save drafted and keeps the one already onchain. Must not be the zero address.

boolean
Defaults to false

Set when saving a configuration the creator has not chosen a launch date for. Stage start and end times are still required, but they are held as a placeholder rather than a schedule: the whole stage set is shifted so the earliest stage opens at the Unix epoch, preserving each stage's duration and the gaps between them, and publishing the drop is refused until a launch date is set. Omit it to leave the drop scheduled; an explicit null is rejected.

string | null

Maximum supply for the drop as a decimal string

stages
array of objects
required
length between 1 and 2147483647

The drop's complete stage set, replacing any existing stages rather than merging with them. Exactly one stage must be public_sale and it must be first in this array. The presales that follow must be contiguous among themselves, each starting exactly when the previous presale ended, and the last must end exactly when the public stage starts. The first presale start time is not constrained. Array order is therefore not chronological: the public stage is listed first and runs last.

stages*

A drop stage for Creator Studio edits

string | null

For a signed_presale stage, the token returned by POST /api/v2/drops/{slug}/allowlist/validate (or the upload context's token) for the stage's allowlist file.

string | null

Stage description

date-time
required

Stage end time

string
required

Stage name shown to minters, 1 to 100 characters. Required: a stage without one cannot be published.

string | null

Maximum token supply for this stage as a decimal string

string
required

This stage's per-wallet limit as a decimal string: what the stage adds for each wallet on its list, unless that wallet's allowlist row sets its own. Not a running total: limits add up across the stages a wallet is listed on, the public stage adds its own on top, and unused mints carry into later stages.

price
object
required

Stage price

string
enum
required

Stage type. public_sale for the open stage, signed_presale for an allowlist stage. merkle_presale exists in the underlying enum but is rejected: no drop has ever used one and mints against such a stage fail.

Allowed:
date-time
required

Stage start time

string
required

Stage UUID. Reuse an existing stage UUID to update that stage, or supply a new one to add a stage. Because stages replaces the whole set, omitting a stage deletes it. Send an existing uuid exactly as GET /api/v2/drops/{slug} returns it: stages match by exact string, so the same UUID with dashes added or removed is treated as a new stage.

Responses

401

Invalid or missing API key

500

Internal server error. Please open a support ticket so OpenSea can investigate.

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
*/*