---
title: "Make a Network-Specific Procedure Call"
method: POST
path: "/call"
tags: ["Call"]
---

# Make a Network-Specific Procedure Call

`POST /call`

Call invokes an arbitrary, network-specific procedure call with network-specific
parameters. The guidance for what this endpoint should or could do is
purposely left vague. In Ethereum, this could be used to invoke `eth_call`
to implement an entire Rosetta API interface for some smart contract that
is not parsed by the implementation creator (like a DEX). This endpoint
could also be used to provide access to data that does not map
to any Rosetta models instead of requiring an integrator to use some
network-specific SDK and call some network-specific endpoint (like surfacing
staking parameters).

Call is NOT a replacement for implementing Rosetta API endpoints or mapping
network-specific data to Rosetta models. Rather, it enables developers to build
additional Rosetta API interfaces for things they care about without introducing
complexity into a base-level Rosetta implementation. Simply put, imagine
that the average integrator will use layered Rosetta API implementations
that each surfaces unique data.

## Request body

- CallRequest — CallRequest is the input to the `/call` endpoint.
  - `network_identifier` NetworkIdentifier, required — unresolved $ref
  - `method` string, required — Method is some network-specific procedure call. This method could map to a network-specific RPC endpoint, a method in an SDK generated from a smart contract, or some hybrid of the two. The implementation must define all available methods in the Allow object. However, it is up to the caller to determine which parameters to provide when invoking `/call`.
  - `parameters` object, required — Parameters is some network-specific argument for a method. It is up to the caller to determine which parameters to provide when invoking `/call`.

## Response `200`

Expected response to a valid request

- CallResponse — CallResponse contains the result of a `/call` invocation.
  - `result` object, required — Result contains the result of the `/call` invocation. This result will not be inspected or interpreted by Rosetta tooling and is left to the caller to decode.
  - `idempotent` boolean, required — Idempotent indicates that if `/call` is invoked with the same CallRequest again, at any point in time, it will return the same CallResponse. Integrators may cache the CallResponse if this is set to true to avoid making unnecessary calls to the Rosetta implementation. For this reason, implementers should be very conservative about returning true here or they could cause issues for the caller.

## Other responses

- `500` — unexpected error

## Changes

> 50 revisions in range; 1 could not be searched.

- **2020-10-02** `9c3c7f7665c5` — 1 breaking
  - the `idempotent` response's property type/format changed from `bool`/`` to `boolean`/`` for status `200`
- **2020-10-02** `c3bc15e22e0b` — 1 info
  - endpoint added
- **2020-08-07** `97f3c6540212` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/coinbase/apis/rosetta/changes/call/post.md)

---

[API](https://skmtc.dev/coinbase/apis/rosetta.md) · [All operations](https://skmtc.dev/coinbase/apis/rosetta/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coinbase/rosetta/revisions/758497aacc08/schema)
