# Low vs High level API

## Interactions

`AeSdk` is a general, high-level interface that wraps multiple low-level interfaces. A general interface is preferred for its simplicity and resilience to breaking changes.

But there is also low-level interfaces. It's excellent for additional control, and as a teaching tool to understand the underlying operations. Most real-world requirements involves a series of low-level operations, so the SDK provides abstractions for these.

### Node API

The aeternity node exposes [a REST API](https://api-docs.aeternity.io/). This API is described in the [OpenAPI document](https://mainnet.aeternity.io/api?oas3). SDK uses this document to generate a TypeScript client. The result client (implemented in [`Node` class](https://sdk.aeternity.io/v14.1.0/api/classes/Node.html)) a basically a mapping of all node endpoints as functions.

So to get a transaction based on its hash you would invoke `node.getTransactionByHash('th_fWEsg152BNYcrqA9jDh9VVpacYojCUb1yu45zUnqhmQ3dAAC6')`. In this way the SDK is simply a mapping of the raw API calls into JavaScript.

### Transaction builder

Any blockchain state change requires signing a transaction. Transaction should be built according to the [protocol](https://github.com/aeternity/protocol/blob/c007deeac4a01e401238412801ac7084ac72d60e/serializations.md#accounts-version-1-basic-accounts). SDK implements it in [`buildTx`](https://sdk.aeternity.io/v14.1.0/api/functions/buildTx.html), [`buildTxAsync`](https://sdk.aeternity.io/v14.1.0/api/functions/buildTxAsync.html), and [`unpackTx`](https://sdk.aeternity.io/v14.1.0/api/functions/unpackTx.html). [`buildTxAsync`](https://sdk.aeternity.io/v14.1.0/api/functions/buildTxAsync.html) requires fewer arguments than [`buildTx`](https://sdk.aeternity.io/v14.1.0/api/functions/buildTx.html), but it expects the node instance provided in arguments.

## High-level SDK usage (preferable)

Example spend call, using æternity's SDK abstraction:

{% @github-files/github-code-block url="<https://github.com/aeternity/aepp-sdk-js/blob/1cd128798018d98bdd41eff9104442b44b385d46/examples/node/_api-high-level.js#L1-L18>" %}

## Low-level SDK usage

The same spend execution, but using low-level SDK functions:

{% @github-files/github-code-block url="<https://github.com/aeternity/aepp-sdk-js/blob/1cd128798018d98bdd41eff9104442b44b385d46/examples/node/_api-low-level.js#L1-L19>" %}
