Drops Endpoints

Update Creator Studio drop edits

Changed on

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.

post/api/v2/drops/{slug}

Request

Path parameters

slugstring required

The collection slug identifying the drop to update

Request body

creator_payout_addressstring nullable

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.

launch_date_pendingboolean

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.

max_supplystring nullable

Maximum supply for the drop as a decimal string

Example request

{
  "creator_payout_address": "0x1234567890123456789012345678901234567890",
  "stages": [
    {
      "end_time": "2024-01-01T01:00:00Z",
      "label": "Public sale",
      "price": {
        "contract_address": "0x0000000000000000000000000000000000000000",
        "unit": "0.05"
      },
      "stage_type": "signed_presale",
      "start_time": "2024-01-01T00:00:00Z"
    }
  ]
}

Response

Drop edits saved successfully

successboolean required

Whether the drop edits were saved successfully

Changes

    • breaking

      request property // was restricted to a list of enum values

    • breaking

      the request property // became required

    • info

      added the new optional request property

    • info

      the request property became nullable

    • info

      the request property became nullable

    • info

      the request property // became nullable

    • info

      the request property // became nullable

    • info

      the request property // became nullable

    • info

      added the new public_sale enum value to the request property //

    • info

      added the new signed_presale enum value to the request property //

    • info

      added the media type */* for the response with the status

    • info

      added the media type */* for the response with the status

    • info

      added the media type */* for the response with the status

    • info

      added the optional property to the response with the status