putty
API ReferenceArtifacts

Compose a drop's onchain deploy

Composes the transaction that publishes this drop onchain and hands it back UNSIGNED: the predicted contract `address`, the `calldata` for the creator to sign, the ABI-encoded `encodedArgs`, and the five `args` in constructor order so a page can show exactly what is being signed. **putty holds no key, signs nothing, and broadcasts nothing.** The drop is owned by the wallet in `args` and minted only by it, so a server that signed the deployment would own every drop it published. You sign `calldata` with your own wallet and send it to `factory` yourself. Calling this route changes no state and can be repeated as often as you like — it is a preview, not a publish. **The factory is this deployment's, never yours.** `factory` is read from configuration, so it cannot be supplied in the body: a request-chosen factory would let you be handed a prediction for a contract putty does not control, which would look entirely correct and would never deploy anywhere. A 400 that mentions `factory` is this api's own body validator refusing an unknown field — this route has no request body, so there is nothing to put one in. **When no factory is configured, `address` is the zero address and `calldata` is `0x`.** A drop deployed by your own contract lands wherever that contract's salt puts it, and putty does not invent an address for it. `args` and `encodedArgs` are still correct in that case: deploy the drop yourself with them. A drop belonging to another creator answers with the same 404 as one that does not exist, byte for byte, so this route cannot be used to find out whose drops exist. A drop putty will not compose — no name, no symbol, a supply below one, a royalty outside 0-10 000 — is a 400 whose `error.code` is the machine-readable reason: `name_required`, `symbol_required`, `supply_invalid`, `royalty_invalid`, or `creator_invalid`. A drop with no `creatorAddress` set at all is a 400 with the code `creator_address_required` — the one address an onchain drop cannot go without, which no amount of retrying will supply, so that page should send the creator to `PATCH /creator/drops/{dropId}` rather than to retry.

POST
/creator/drops/{dropId}/publish

Composes the transaction that publishes this drop onchain and hands it back UNSIGNED: the predicted contract address, the calldata for the creator to sign, the ABI-encoded encodedArgs, and the five args in constructor order so a page can show exactly what is being signed. putty holds no key, signs nothing, and broadcasts nothing. The drop is owned by the wallet in args and minted only by it, so a server that signed the deployment would own every drop it published. You sign calldata with your own wallet and send it to factory yourself. Calling this route changes no state and can be repeated as often as you like — it is a preview, not a publish. The factory is this deployment's, never yours. factory is read from configuration, so it cannot be supplied in the body: a request-chosen factory would let you be handed a prediction for a contract putty does not control, which would look entirely correct and would never deploy anywhere. A 400 that mentions factory is this api's own body validator refusing an unknown field — this route has no request body, so there is nothing to put one in. When no factory is configured, address is the zero address and calldata is 0x. A drop deployed by your own contract lands wherever that contract's salt puts it, and putty does not invent an address for it. args and encodedArgs are still correct in that case: deploy the drop yourself with them. A drop belonging to another creator answers with the same 404 as one that does not exist, byte for byte, so this route cannot be used to find out whose drops exist. A drop putty will not compose — no name, no symbol, a supply below one, a royalty outside 0-10 000 — is a 400 whose error.code is the machine-readable reason: name_required, symbol_required, supply_invalid, royalty_invalid, or creator_invalid. A drop with no creatorAddress set at all is a 400 with the code creator_address_required — the one address an onchain drop cannot go without, which no amount of retrying will supply, so that page should send the creator to PATCH /creator/drops/{dropId} rather than to retry.

Authorization

bearerAuth
AuthorizationBearer <token>

A bearer token. The Account routes accept a Privy access token; the MCP transport accepts an sk- API key issued by POST /account/api-keys.

In: header

Path Parameters

dropId*string

The drop's id. The last segment of its public mint-page URL.

Length1 <= length <= 64

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/creator/drops/string/publish"
{  "address": "string",  "factory": "string",  "calldata": "string",  "encodedArgs": "string",  "args": [    "string",    "string",    "string",    "string",    "string"  ]}