putty
API ReferenceArtifacts

Read one launch, reconciling it against the chain

**Reading a launch reconciles it.** A launch is recorded as `awaiting_signature` and stays there until the chain says its token exists; there is no worker, so this read is what asks. When the launch is still `awaiting_signature` and the chain reports a deployed token, this route reads the creation transaction's receipt, decodes the factory's `TokenCreated` event, and records the token address — moving the launch to `live` before answering. The response is the reconciled row, and it is the same row a later read returns. The server still never signs and never broadcasts. It reads a receipt; the transaction was signed by the caller with their own wallet and reported through `POST /tx/{id}/submitted`. A launch that cannot advance yet is still a **200**, with the row unchanged and `reconcileReason` saying why: `receipt_pending` (the node answered, the receipt is not mined), `not_submitted` (the creation transaction has no reported hash yet), `venue_blocked` (this launch names a venue that cannot build a launch), or `chain_unreadable` (the node could not be reached; `reconcileDetail` carries its sentence). A launch waiting to be mined is a normal state, not a server fault, so this route does not answer 5xx for one. Poll again. A launch belonging to another user returns the same 404 as one that does not exist.

GET
/launches/{id}

Reading a launch reconciles it. A launch is recorded as awaiting_signature and stays there until the chain says its token exists; there is no worker, so this read is what asks. When the launch is still awaiting_signature and the chain reports a deployed token, this route reads the creation transaction's receipt, decodes the factory's TokenCreated event, and records the token address — moving the launch to live before answering. The response is the reconciled row, and it is the same row a later read returns. The server still never signs and never broadcasts. It reads a receipt; the transaction was signed by the caller with their own wallet and reported through POST /tx/{id}/submitted. A launch that cannot advance yet is still a 200, with the row unchanged and reconcileReason saying why: receipt_pending (the node answered, the receipt is not mined), not_submitted (the creation transaction has no reported hash yet), venue_blocked (this launch names a venue that cannot build a launch), or chain_unreadable (the node could not be reached; reconcileDetail carries its sentence). A launch waiting to be mined is a normal state, not a server fault, so this route does not answer 5xx for one. Poll again. A launch belonging to another user returns the same 404 as one that does not exist.

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

id*string

The launch id.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/launches/string"
{  "id": "string",  "ownerId": "string",  "projectId": "string",  "chainSlug": "ethereum",  "provider": "erc20-direct",  "params": {    "property1": null,    "property2": null  },  "txRequestId": "string",  "tokenAddress": "string",  "status": "string",  "poolId": "string",  "hookAddress": "string",  "trustManifestAddress": "string",  "predictedTrustManifestAddress": "string",  "trustManifestTx": {    "chainId": 0,    "to": "string",    "data": "string",    "value": "string"  },  "trustManifestState": "none",  "venueAvailable": true,  "venueBlockedReason": "string",  "createdAt": "string",  "updatedAt": "string",  "reconcileReason": "string",  "reconcileDetail": "string"}

Quote the mainnet deploy fee and the remaining free launches GET

Quotes what a mainnet launch costs the caller **before** they sign, and how many free mainnet launches they have left today. Two different facts, one read, because a user deciding whether to launch needs both and neither changes between them: the fee for this specific chain, and the account's remaining daily allowance. `feePutty` is `0` while the amount is unset. That is not a price — §6.3 requires a small deploy fee in $PUTTY and §11 decision 5 chose the mechanism, but the plan fixes no amount, so putty quotes zero and says so in `note` rather than inventing a financial constant. The operator sets the amount with `MAINNET_FEE_PUTTY`. §6.3's rebate half — the fee returned once the token passes a volume or holder threshold — has no stated threshold and is not applied. This is a read: it does not consume the allowance. Only a recorded launch does, so calling it to display a price is free.

Declare this launch's trust manifest PUT

Records the `PuttyTrustModule` the creator deployed for this token, which is what the Receipts page expands to list the token's modules. Send `null` to withdraw the declaration. The address is a claim, not a verification: the page reads every module from the chain live and drops any that do not answer, so a wrong or stale address makes the page show fewer modules, never more. Requires a launch that has already produced a token address, because the page is looked up by token. A launch belonging to another user returns the same 404 as one that does not exist.