Drops Endpoints

Upload drop metadata manifest

Changed on

The file is a CSV describing every item in the drop, one row per uploaded media file. Required columns are tokenID, name, description, and file_name, where file_name matches the filename passed to POST /api/v2/drops/{slug}/items/media. Optional columns are external_url, animation_url, and one attributes[<trait type>] column per trait. Upload it in two steps. First, request this context from OpenSea. Second, call the returned method at the returned URL. For POST, add every fields entry unchanged as a multipart text field, then add a file part containing the bytes. The file part must be last. Let the HTTP library generate the multipart boundary; do not set the overall multipart Content-Type header yourself. POST storage uploads normally return 204. For PUT, upload the raw bytes, use only headers explicitly required by the endpoint, and expect 200. Treat any 2xx storage response as success. The URL and fields are short-lived sensitive credentials. Do not log, persist, alter, or put them in tickets. Unlike other upload contexts, the returned token is not passed to any later call: the file is stored against the drop, and the next POST /api/v2/drops/{slug}/items/media/save-batch reads it. Send one filename per row there, because the save keeps only the files the manifest names. Without a manifest, items get token ids 1 to n in upload order, named #1 to #n, with no description or traits. Manifests do not apply to ERC-1155 self-mint drops, which return 400; each of their items is created with POST /api/v2/drops/{slug}/items.

post/api/v2/drops/{slug}/items/manifest

Request

Path parameters

slugstring required

Collection slug

Response

Upload context generated successfully

fieldsobject required

Short-lived sensitive multipart text fields for POST. Submit every entry unchanged before the file part. Content-Type contains the exact MIME type required by the signed policy. This map is empty for PUT.

method'POST' | 'PUT' required

HTTP method to use at url. Current upload contexts use POST.

tokenstring required

Reference for the next OpenSea API call. Use it only after storage returns 2xx.

urlstring required

Short-lived storage URL. Use it exactly as returned and treat it as sensitive.

Example response

{
  "fields": {
    "key": "uploads/example.png",
    "Content-Type": "image/png"
  },
  "method": "POST",
  "token": "upload-token-example",
  "url": "https://uploads.example.com/"
}

Changes