The best way to access Request Network is using the Request Network SDK with a Request Node. In this way, the Request Node operator pays the protocol fee for creating requests and reduces the number of transactions signed by the end user resulting in a better user experience.
The Request Network SDK is split into multiple packages so that Builders can pick and choose the features they need.

External Packages

These are the packages that we think would be most commonly used by Builders to build applications.
Create, update, and retrieve requests.
Sign requests using web3 wallets like Metamask
Sign requests using Ethereum private keys
Standards for data stored on Request, like invoice format
Decrypt encrypted requests using Ethereum private keys
Pay a request using a web3 wallet
Web server that allows easy access to the Request system
Tools for managing currency definitions
For a list of internal packages, see Internal Packages.

Import the packages

The Request Client library can be imported as ES6 or CommonJS modules.
import { RequestNetwork } from '@requestnetwork/request-client.js';
import { Web3SignatureProvider } from '@requestnetwork/web3-signature';
import { payRequest } from '@requestnetwork/payment-processor';
const { RequestNetwork } = require('@requestnetwork/request-client.js');
const { Web3SignatureProvider } = require('@requestnetwork/web3-signature');
const { payRequest } = require("@requestnetwork/payment-processor");

Internal Packages

These packages are published publicly but contain functions that are internal to the External Packages. It is less likely that a Builder would need to use these packages.
Extensions to the protocol
Indexing and batching of transactions
Storage of Request data on Ethereum and IPFS, with custom indexing
Serialize and deserialize object in the Request Network protocol
Payment detection, to compute the balance.
The Request business logic: properties and actions of requests
Sources and artifacts of the smart contracts
Storage of Request data on Ethereum and IPFS, indexed by TheGraph
Creates transactions to be sent to Data Access, managing encryption
Typescript types shared across @requestnetwork packages
Collection of tools shared between the @requestnetwork packages