Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Error Codes

All API errors return a JSON body with an error field (machine-readable code) and a message field (human-readable description).

{
  "error":   "name_taken",
  "message": "A project with the name 'my-agent' already exists."
}

HTTP errors

400 Bad Request

CodeDescription
name_requiredname field is missing or empty
name_too_longProject name exceeds 64 characters
name_takenA project with this name already exists
hash_requiredarweaveHash is missing or empty
tag_requiredversionTag is missing or empty
invalid_idProject ID is not a valid number
content_too_largeUpload exceeds the 50 MB limit

402 Payment Required

Payment is required. The response body contains x402 payment terms.

{
  "error":  "payment_required",
  "amount": "100000",
  "token":  "USDC",
  "payTo":  "0x23012C3EF1E95aBC0792c03671B9be33C239D449",
  "network": "base"
}

Retry the request with a valid X-PAYMENT header. See x402 Payments.

403 Forbidden

CodeDescription
not_owner_or_collaboratorCaller is not the project owner or an approved collaborator
payment_invalidThe x402 payment signature is invalid or expired
payment_amount_mismatchPayment amount does not match the required fee

404 Not Found

CodeDescription
project_not_foundNo project exists with the given ID
version_not_foundNo version exists with the given index
route_not_foundThe requested route does not exist

500 Internal Server Error

CodeDescription
rpc_errorCould not reach the Base RPC endpoint
arweave_upload_failedArweave upload via ArDrive Turbo failed
tx_failedOn-chain transaction was submitted but reverted

Contract revert reasons

When a transaction reverts on-chain, the API returns tx_failed with the revert reason in the message field.

InkdRegistry

RevertCause
EmptyName()Project name is empty
NameTooLong()Name exceeds 64 characters
NameTaken()Name already registered
DescriptionTooLong()Description exceeds 1024 characters
EmptyArweaveHash()Arweave hash is empty
EmptyVersionTag()Version tag is empty
ProjectNotFound()Project ID does not exist
NotOwnerOrCollaborator()Caller lacks push permission
CannotAddOwner()Cannot add the project owner as a collaborator
AlreadyCollaborator()Address is already a collaborator
NotCollaborator()Address is not a collaborator
TooManyCollaborators()Project already has 50 collaborators
ZeroAddress()Zero address passed where disallowed

InkdTreasury

RevertCause
Unauthorized()Caller is not the settler or registry
ZeroAddress()Zero address passed where disallowed
Nothing to settletotal is 0
Insufficient USDCTreasury USDC balance < total

InkdBuyback

RevertCause
InkdTokenNotSet()inkdToken is address(0) — set after Clanker launch
BelowThreshold(balance, threshold)USDC balance has not reached buyback threshold
NothingToWithdraw()No USDC balance to withdraw
ZeroAddress()Zero address passed where disallowed
Max 10% slippagemaxSlippageBps exceeds 1000
InkdBuyback: only treasurydeposit() called by non-treasury address

Debugging tips

tx_failed with NameTaken A project with that name already exists on-chain. Choose a different name.

payment_invalid Your EIP-3009 authorization has expired (valid window is 5 minutes) or the nonce was already used. Generate a fresh authorization and retry.

not_owner_or_collaborator The wallet signing the request is not the project owner and has not been added as a collaborator. Check with GET /v1/projects/:id that your address matches the owner field.