---
title: "Build publish transaction data for a drop"
method: POST
path: "/api/v2/drops/{slug}/publish"
tags: ["Drops Endpoints"]
---

# Build publish transaction data for a drop

`POST /api/v2/drops/{slug}/publish`

## Request

- Base URL: `https://api.opensea.io`
- URL: `https://api.opensea.io/api/v2/drops/{slug}/publish`
- Auth: API key in header `x-api-key` and OpenID Connect (`https://auth.opensea.io/.well-known/openid-configuration`, scopes: `write:drops`)
- TypeScript: <https://skmtc.dev/opensea/apis/opensea-api/docs/api/v2/drops/:slug/publish/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns a ready-to-sign transaction that applies the drop's saved edits onchain: stages, supply, base URI, payout, and the OpenSea signer, fee recipient, and payers the drop needs. Every value is computed by OpenSea; do not build or change this calldata yourself, or signed presales stop validating.

Send the transaction from `from`, the contract's onchain owner. Only the collection owner can call this endpoint.

Only ERC-721 SeaDrop V1 drops are published. An ERC-1155 self-mint drop has no publish step and returns 400: each of its items goes onchain through the transaction POST /api/v2/drops/{slug}/items returns.

A 400 carries the reason the drop cannot be published, for example that it is disabled, its launch date is still pending, it has no saved edits to apply, or a stage has a price while neither the saved edits nor the contract has a creator payout address (every paid mint would revert). After a first publish, the drop is live once GET /api/v2/drops/{slug} returns it, which happens after the transaction is mined and indexed.

To reveal, run POST /api/v2/drops/{slug}/metadata/ipfs, wait for it to complete, then call this endpoint again to put the new base URI onchain.

The transaction does not set a provenance hash or change contractURI(). SeaDrop only accepts setProvenanceHash() before the first token is minted, so a drop that wants one must send that call from the owner itself before minting starts; after the first mint it reverts.

## Path parameters

- `slug` string, required

## Response `200`

Ready-to-sign publish transaction

- DropTransactionResponse: Ready-to-sign drop transaction
  - `chain` string, required: Chain identifier
  - `data` string, required: Encoded transaction data (hex)
  - `from` string, required: Address the transaction must be sent from: the contract's onchain owner. Sent from any other address it reverts.
  - `to` string, required: Transaction target contract address
  - `value` string, required: Native currency to send with the transaction, in wei, as a decimal string (not hex)

## Other responses

- `400`: For error reasons, review the response data.
- `401`: Invalid or missing API key
- `403`: Wallet token lacks permission for this request
- `404`: Resource not found
- `409`: Conflict
- `500`: Internal server error. Please open a support ticket so OpenSea can investigate.

## Changes

- **2026-11-03** `2c7935d84f90`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/opensea/apis/opensea-api/changes/api/v2/drops/:slug/publish/post.md)

---

[API](https://skmtc.dev/opensea/apis/opensea-api.md) - [All operations](https://skmtc.dev/opensea/apis/opensea-api/llms.txt) - [OpenAPI document](https://skmtc.dev/opensea/apis/opensea-api/revisions/2c7935d84f90?raw)
