> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://docs.prividium.com/api/mcp` to find what you need.
>
> **Have feedback?** Use `submit_feedback` on the same MCP server.

# contracts

Contract management endpoints

## GET /contracts/

`GET /contracts/`

List contracts grouped by template. Returns template groups (with counts) followed by ungrouped contracts.

### Query parameters

- `limit` `integer`
- `offset` `integer`
- `searchQuery` `string`

### Responses

#### `200`: Default Response

Body (`application/json`):

- `items` `object[]` _(required)_
- `pagination` `object` _(required)_
  - `currentPage` `integer` _(required)_
  - `totalPages` `integer` _(required)_
  - `totalItems` `integer` _(required)_
  - `limit` `integer` _(required)_
  - `offset` `integer` _(required)_
- `totalGroups` `integer` _(required)_
- `totalUngrouped` `integer` _(required)_
- `totalContracts` `integer` _(required)_

#### `401`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `403`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl '/api/contracts/?limit=10&offset=0&searchQuery=string'
```

```ts
fetch('/api/contracts/?limit=10&offset=0&searchQuery=string')
```

## POST /contracts/

`POST /contracts/`

Create a new contract

### Request body (required) (`application/json`)

- `contractAddress` `string` _(required)_
- `abi` `string` _(required)_
- `name` `string` _(required)_
- `description` `string | null` _(required)_
- `discloseErc20TotalSupply` `boolean`
- `discloseBytecode` `boolean`
- `disclosedAddresses` `object[]`
  - `address` `string` _(required)_
- `templateId` `integer`
- `templateKey` `string | null`
- `disclosureStartBlock` `string` _(required)_
- `organizationId` `string | null`

### Responses

#### `201`: Default Response

Body (`application/json`):

- `contractAddress` `string` _(required)_
- `abi` `string` _(required)_
- `name` `string` _(required)_
- `description` `string | null` _(required)_
- `discloseErc20TotalSupply` `boolean` _(required)_
- `discloseBytecode` `boolean` _(required)_
- `templateId` `integer` _(required)_
- `isSystemContract` `boolean` _(required)_
- `organizationId` `string | null` _(required)_
- `disclosedAddresses` `object[]` _(required)_
  - `address` `string` _(required)_
- `createdAt` `string <date-time>` _(required)_
- `updatedAt` `string <date-time>` _(required)_
- `disclosureStartBlock` `string` _(required)_

#### `400`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `403`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `503`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl /api/contracts/ \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "contractAddress": "string",
  "abi": "string",
  "name": "string",
  "description": "string",
  "discloseErc20TotalSupply": false,
  "discloseBytecode": false,
  "disclosedAddresses": [],
  "templateId": 0,
  "templateKey": "string",
  "disclosureStartBlock": "string",
  "organizationId": "string"
}'
```

```ts
fetch('/api/contracts/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    contractAddress: 'string',
    abi: 'string',
    name: 'string',
    description: 'string',
    discloseErc20TotalSupply: false,
    discloseBytecode: false,
    disclosedAddresses: [],
    templateId: 0,
    templateKey: 'string',
    disclosureStartBlock: 'string',
    organizationId: 'string'
  })
})
```

## GET /contracts/by-template/{templateId}

`GET /contracts/by-template/{templateId}`

List contracts for a specific template with pagination

### Path parameters

- `templateId` `integer` _(required)_

### Query parameters

- `limit` `integer`
- `offset` `integer`
- `searchQuery` `string`

### Responses

#### `200`: Default Response

Body (`application/json`):

- `items` `object[]` _(required)_
  - `contractAddress` `string` _(required)_
  - `abi` `string` _(required)_
  - `name` `string` _(required)_
  - `description` `string | null` _(required)_
  - `discloseErc20TotalSupply` `boolean` _(required)_
  - `discloseBytecode` `boolean` _(required)_
  - `templateId` `integer` _(required)_
  - `isSystemContract` `boolean` _(required)_
  - `organizationId` `string | null` _(required)_
  - `disclosedAddresses` `object[]` _(required)_
    - `address` `string` _(required)_
  - `createdAt` `string <date-time>` _(required)_
  - `updatedAt` `string <date-time>` _(required)_
  - `disclosureStartBlock` `string` _(required)_
- `pagination` `object` _(required)_
  - `currentPage` `integer` _(required)_
  - `totalPages` `integer` _(required)_
  - `totalItems` `integer` _(required)_
  - `limit` `integer` _(required)_
  - `offset` `integer` _(required)_
- `template` `object` _(required)_
  - `id` `integer` _(required)_
  - `templateKey` `string` _(required)_
  - `name` `string` _(required)_
  - `description` `string | null` _(required)_

#### `401`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `403`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `404`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl '/api/contracts/by-template/0?limit=10&offset=0&searchQuery=string'
```

```ts
fetch('/api/contracts/by-template/0?limit=10&offset=0&searchQuery=string')
```

## GET /contracts/{contractAddress}

`GET /contracts/{contractAddress}`

Get a contract by address

### Path parameters

- `contractAddress` `string` _(required)_

### Responses

#### `200`: Default Response

Body (`application/json`):

- `contractAddress` `string` _(required)_
- `abi` `string` _(required)_
- `name` `string` _(required)_
- `description` `string | null` _(required)_
- `discloseErc20TotalSupply` `boolean` _(required)_
- `discloseBytecode` `boolean` _(required)_
- `templateId` `integer` _(required)_
- `isSystemContract` `boolean` _(required)_
- `organizationId` `string | null` _(required)_
- `disclosedAddresses` `object[]` _(required)_
  - `address` `string` _(required)_
- `createdAt` `string <date-time>` _(required)_
- `updatedAt` `string <date-time>` _(required)_
- `disclosureStartBlock` `string` _(required)_

#### `404`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl /api/contracts/string
```

```ts
fetch('/api/contracts/string')
```

## PUT /contracts/{contractAddress}

`PUT /contracts/{contractAddress}`

Replace a contract (full update)

### Path parameters

- `contractAddress` `string` _(required)_

### Request body (required) (`application/json`)

- `contractAddress` `string` _(required)_
- `abi` `string` _(required)_
- `name` `string` _(required)_
- `description` `string | null` _(required)_
- `discloseErc20TotalSupply` `boolean` _(required)_
- `discloseBytecode` `boolean` _(required)_
- `disclosedAddresses` `object[]`
  - `address` `string` _(required)_
- `templateId` `integer`
- `templateKey` `string | null`
- `disclosureStartBlock` `string` _(required)_

### Responses

#### `200`: Default Response

Body (`application/json`):

- `contractAddress` `string` _(required)_
- `abi` `string` _(required)_
- `name` `string` _(required)_
- `description` `string | null` _(required)_
- `discloseErc20TotalSupply` `boolean` _(required)_
- `discloseBytecode` `boolean` _(required)_
- `templateId` `integer` _(required)_
- `isSystemContract` `boolean` _(required)_
- `organizationId` `string | null` _(required)_
- `disclosedAddresses` `object[]` _(required)_
  - `address` `string` _(required)_
- `createdAt` `string <date-time>` _(required)_
- `updatedAt` `string <date-time>` _(required)_
- `disclosureStartBlock` `string` _(required)_

#### `400`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `404`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `409`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `503`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl /api/contracts/string \
  --request PUT \
  --header 'Content-Type: application/json' \
  --data '{
  "contractAddress": "string",
  "abi": "string",
  "name": "string",
  "description": "string",
  "discloseErc20TotalSupply": true,
  "discloseBytecode": true,
  "disclosedAddresses": [
    {
      "address": "string"
    }
  ],
  "templateId": 0,
  "templateKey": "string",
  "disclosureStartBlock": "string"
}'
```

```ts
fetch('/api/contracts/string', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    contractAddress: 'string',
    abi: 'string',
    name: 'string',
    description: 'string',
    discloseErc20TotalSupply: true,
    discloseBytecode: true,
    disclosedAddresses: [
      {
        address: 'string'
      }
    ],
    templateId: 0,
    templateKey: 'string',
    disclosureStartBlock: 'string'
  })
})
```

## DELETE /contracts/{contractAddress}

`DELETE /contracts/{contractAddress}`

Delete a contract

### Path parameters

- `contractAddress` `string` _(required)_

### Responses

#### `204`: Default Response

#### `400`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `404`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl /api/contracts/string \
  --request DELETE
```

```ts
fetch('/api/contracts/string', {
  method: 'DELETE'
})
```

## GET /contracts/{contractAddress}/abi

`GET /contracts/{contractAddress}/abi`

Get contract ABI filtered to only functions the authenticated user can access. This allows dApps to fetch ABIs at runtime instead of bundling them, preventing exposure of contract interfaces publicly.

### Path parameters

- `contractAddress` `string` _(required)_

### Responses

#### `200`: Default Response

Body (`application/json`):

- `contractAddress` `string` _(required)_
- `name` `string | null` _(required)_
- `abi` `object[]` _(required)_
- `functions` `object[]` _(required)_
  - `selector` `string` _(required)_
  - `signature` `string` _(required)_
  - `name` `string` _(required)_
  - `accessType` `string` _(required)_

#### `401`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `403`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `404`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

#### `422`: Default Response

Body (`application/json`):

- `error` `object` _(required)_
  - `code` `string` _(required)_
  - `message` `string` _(required)_
  - `issues` `unknown[]`

### Example request

```bash
curl /api/contracts/string/abi
```

```ts
fetch('/api/contracts/string/abi')
```
