diff --git a/ai-tools/claude-code.mdx b/ai-tools/claude-code.mdx
deleted file mode 100644
index bdc4e04..0000000
--- a/ai-tools/claude-code.mdx
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: "Claude Code setup"
-description: "Configure Claude Code for your documentation workflow"
-icon: "asterisk"
----
-
-Claude Code is Anthropic's official CLI tool. This guide will help you set up Claude Code to help you write and maintain your documentation.
-
-## Prerequisites
-
-- Active Claude subscription (Pro, Max, or API access)
-
-## Setup
-
-1. Install Claude Code globally:
-
- ```bash
- npm install -g @anthropic-ai/claude-code
-```
-
-2. Navigate to your docs directory.
-3. (Optional) Add the `CLAUDE.md` file below to your project.
-4. Run `claude` to start.
-
-## Create `CLAUDE.md`
-
-Create a `CLAUDE.md` file at the root of your documentation repository to train Claude Code on your specific documentation standards:
-
-````markdown
-# Mintlify documentation
-
-## Working relationship
-- You can push back on ideas-this can lead to better documentation. Cite sources and explain your reasoning when you do so
-- ALWAYS ask for clarification rather than making assumptions
-- NEVER lie, guess, or make up information
-
-## Project context
-- Format: MDX files with YAML frontmatter
-- Config: docs.json for navigation, theme, settings
-- Components: Mintlify components
-
-## Content strategy
-- Document just enough for user success - not too much, not too little
-- Prioritize accuracy and usability of information
-- Make content evergreen when possible
-- Search for existing information before adding new content. Avoid duplication unless it is done for a strategic reason
-- Check existing patterns for consistency
-- Start by making the smallest reasonable changes
-
-## Frontmatter requirements for pages
-- title: Clear, descriptive page title
-- description: Concise summary for SEO/navigation
-
-## Writing standards
-- Second-person voice ("you")
-- Prerequisites at start of procedural content
-- Test all code examples before publishing
-- Match style and formatting of existing pages
-- Include both basic and advanced use cases
-- Language tags on all code blocks
-- Alt text on all images
-- Relative paths for internal links
-
-## Git workflow
-- NEVER use --no-verify when committing
-- Ask how to handle uncommitted changes before starting
-- Create a new branch when no clear branch exists for changes
-- Commit frequently throughout development
-- NEVER skip or disable pre-commit hooks
-
-## Do not
-- Skip frontmatter on any MDX file
-- Use absolute URLs for internal links
-- Include untested code examples
-- Make assumptions - always ask for clarification
-````
diff --git a/ai-tools/cursor.mdx b/ai-tools/cursor.mdx
deleted file mode 100644
index fbb7761..0000000
--- a/ai-tools/cursor.mdx
+++ /dev/null
@@ -1,420 +0,0 @@
----
-title: "Cursor setup"
-description: "Configure Cursor for your documentation workflow"
-icon: "arrow-pointer"
----
-
-Use Cursor to help write and maintain your documentation. This guide shows how to configure Cursor for better results on technical writing tasks and using Mintlify components.
-
-## Prerequisites
-
-- Cursor editor installed
-- Access to your documentation repository
-
-## Project rules
-
-Create project rules that all team members can use. In your documentation repository root:
-
-```bash
-mkdir -p .cursor
-```
-
-Create `.cursor/rules.md`:
-
-````markdown
-# Mintlify technical writing rule
-
-You are an AI writing assistant specialized in creating exceptional technical documentation using Mintlify components and following industry-leading technical writing practices.
-
-## Core writing principles
-
-### Language and style requirements
-
-- Use clear, direct language appropriate for technical audiences
-- Write in second person ("you") for instructions and procedures
-- Use active voice over passive voice
-- Employ present tense for current states, future tense for outcomes
-- Avoid jargon unless necessary and define terms when first used
-- Maintain consistent terminology throughout all documentation
-- Keep sentences concise while providing necessary context
-- Use parallel structure in lists, headings, and procedures
-
-### Content organization standards
-
-- Lead with the most important information (inverted pyramid structure)
-- Use progressive disclosure: basic concepts before advanced ones
-- Break complex procedures into numbered steps
-- Include prerequisites and context before instructions
-- Provide expected outcomes for each major step
-- Use descriptive, keyword-rich headings for navigation and SEO
-- Group related information logically with clear section breaks
-
-### User-centered approach
-
-- Focus on user goals and outcomes rather than system features
-- Anticipate common questions and address them proactively
-- Include troubleshooting for likely failure points
-- Write for scannability with clear headings, lists, and white space
-- Include verification steps to confirm success
-
-## Mintlify component reference
-
-### Callout components
-
-#### Note - Additional helpful information
-
-
-Supplementary information that supports the main content without interrupting flow
-
-
-#### Tip - Best practices and pro tips
-
-
-Expert advice, shortcuts, or best practices that enhance user success
-
-
-#### Warning - Important cautions
-
-
-Critical information about potential issues, breaking changes, or destructive actions
-
-
-#### Info - Neutral contextual information
-
-
-Background information, context, or neutral announcements
-
-
-#### Check - Success confirmations
-
-
-Positive confirmations, successful completions, or achievement indicators
-
-
-### Code components
-
-#### Single code block
-
-Example of a single code block:
-
-```javascript config.js
-const apiConfig = {
- baseURL: 'https://api.example.com',
- timeout: 5000,
- headers: {
- 'Authorization': `Bearer ${process.env.API_TOKEN}`
- }
-};
-```
-
-#### Code group with multiple languages
-
-Example of a code group:
-
-
-```javascript Node.js
-const response = await fetch('/api/endpoint', {
- headers: { Authorization: `Bearer ${apiKey}` }
-});
-```
-
-```python Python
-import requests
-response = requests.get('/api/endpoint',
- headers={'Authorization': f'Bearer {api_key}'})
-```
-
-```curl cURL
-curl -X GET '/api/endpoint' \
- -H 'Authorization: Bearer YOUR_API_KEY'
-```
-
-
-#### Request/response examples
-
-Example of request/response documentation:
-
-
-```bash cURL
-curl -X POST 'https://api.example.com/users' \
- -H 'Content-Type: application/json' \
- -d '{"name": "John Doe", "email": "john@example.com"}'
-```
-
-
-
-```json Success
-{
- "id": "user_123",
- "name": "John Doe",
- "email": "john@example.com",
- "created_at": "2024-01-15T10:30:00Z"
-}
-```
-
-
-### Structural components
-
-#### Steps for procedures
-
-Example of step-by-step instructions:
-
-
-
- Run `npm install` to install required packages.
-
-
- Verify installation by running `npm list`.
-
-
-
-
- Create a `.env` file with your API credentials.
-
- ```bash
- API_KEY=your_api_key_here
- ```
-
-
- Never commit API keys to version control.
-
-
-
-
-#### Tabs for alternative content
-
-Example of tabbed content:
-
-
-
- ```bash
- brew install node
- npm install -g package-name
- ```
-
-
-
- ```powershell
- choco install nodejs
- npm install -g package-name
- ```
-
-
-
- ```bash
- sudo apt install nodejs npm
- npm install -g package-name
- ```
-
-
-
-#### Accordions for collapsible content
-
-Example of accordion groups:
-
-
-
- - **Firewall blocking**: Ensure ports 80 and 443 are open
- - **Proxy configuration**: Set HTTP_PROXY environment variable
- - **DNS resolution**: Try using 8.8.8.8 as DNS server
-
-
-
- ```javascript
- const config = {
- performance: { cache: true, timeout: 30000 },
- security: { encryption: 'AES-256' }
- };
- ```
-
-
-
-### Cards and columns for emphasizing information
-
-Example of cards and card groups:
-
-
-Complete walkthrough from installation to your first API call in under 10 minutes.
-
-
-
-
- Learn how to authenticate requests using API keys or JWT tokens.
-
-
-
- Understand rate limits and best practices for high-volume usage.
-
-
-
-### API documentation components
-
-#### Parameter fields
-
-Example of parameter documentation:
-
-
-Unique identifier for the user. Must be a valid UUID v4 format.
-
-
-
-User's email address. Must be valid and unique within the system.
-
-
-
-Maximum number of results to return. Range: 1-100.
-
-
-
-Bearer token for API authentication. Format: `Bearer YOUR_API_KEY`
-
-
-#### Response fields
-
-Example of response field documentation:
-
-
-Unique identifier assigned to the newly created user.
-
-
-
-ISO 8601 formatted timestamp of when the user was created.
-
-
-
-List of permission strings assigned to this user.
-
-
-#### Expandable nested fields
-
-Example of nested field documentation:
-
-
-Complete user object with all associated data.
-
-
-
- User profile information including personal details.
-
-
-
- User's first name as entered during registration.
-
-
-
- URL to user's profile picture. Returns null if no avatar is set.
-
-
-
-
-
-
-### Media and advanced components
-
-#### Frames for images
-
-Wrap all images in frames:
-
-
-
-
-
-
-
-
-
-#### Videos
-
-Use the HTML video element for self-hosted video content:
-
-
-
-Embed YouTube videos using iframe elements:
-
-
-
-#### Tooltips
-
-Example of tooltip usage:
-
-
-API
-
-
-#### Updates
-
-Use updates for changelogs:
-
-
-## New features
-- Added bulk user import functionality
-- Improved error messages with actionable suggestions
-
-## Bug fixes
-- Fixed pagination issue with large datasets
-- Resolved authentication timeout problems
-
-
-## Required page structure
-
-Every documentation page must begin with YAML frontmatter:
-
-```yaml
----
-title: "Clear, specific, keyword-rich title"
-description: "Concise description explaining page purpose and value"
----
-```
-
-## Content quality standards
-
-### Code examples requirements
-
-- Always include complete, runnable examples that users can copy and execute
-- Show proper error handling and edge case management
-- Use realistic data instead of placeholder values
-- Include expected outputs and results for verification
-- Test all code examples thoroughly before publishing
-- Specify language and include filename when relevant
-- Add explanatory comments for complex logic
-- Never include real API keys or secrets in code examples
-
-### API documentation requirements
-
-- Document all parameters including optional ones with clear descriptions
-- Show both success and error response examples with realistic data
-- Include rate limiting information with specific limits
-- Provide authentication examples showing proper format
-- Explain all HTTP status codes and error handling
-- Cover complete request/response cycles
-
-### Accessibility requirements
-
-- Include descriptive alt text for all images and diagrams
-- Use specific, actionable link text instead of "click here"
-- Ensure proper heading hierarchy starting with H2
-- Provide keyboard navigation considerations
-- Use sufficient color contrast in examples and visuals
-- Structure content for easy scanning with headers and lists
-
-## Component selection logic
-
-- Use **Steps** for procedures and sequential instructions
-- Use **Tabs** for platform-specific content or alternative approaches
-- Use **CodeGroup** when showing the same concept in multiple programming languages
-- Use **Accordions** for progressive disclosure of information
-- Use **RequestExample/ResponseExample** specifically for API endpoint documentation
-- Use **ParamField** for API parameters, **ResponseField** for API responses
-- Use **Expandable** for nested object properties or hierarchical information
-````
diff --git a/ai-tools/windsurf.mdx b/ai-tools/windsurf.mdx
deleted file mode 100644
index fce12bf..0000000
--- a/ai-tools/windsurf.mdx
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: "Windsurf setup"
-description: "Configure Windsurf for your documentation workflow"
-icon: "water"
----
-
-Configure Windsurf's Cascade AI assistant to help you write and maintain documentation. This guide shows how to set up Windsurf specifically for your Mintlify documentation workflow.
-
-## Prerequisites
-
-- Windsurf editor installed
-- Access to your documentation repository
-
-## Workspace rules
-
-Create workspace rules that provide Windsurf with context about your documentation project and standards.
-
-Create `.windsurf/rules.md` in your project root:
-
-````markdown
-# Mintlify technical writing rule
-
-## Project context
-
-- This is a documentation project on the Mintlify platform
-- We use MDX files with YAML frontmatter
-- Navigation is configured in `docs.json`
-- We follow technical writing best practices
-
-## Writing standards
-
-- Use second person ("you") for instructions
-- Write in active voice and present tense
-- Start procedures with prerequisites
-- Include expected outcomes for major steps
-- Use descriptive, keyword-rich headings
-- Keep sentences concise but informative
-
-## Required page structure
-
-Every page must start with frontmatter:
-
-```yaml
----
-title: "Clear, specific title"
-description: "Concise description for SEO and navigation"
----
-```
-
-## Mintlify components
-
-### Callouts
-
-- `` for helpful supplementary information
-- `` for important cautions and breaking changes
-- `` for best practices and expert advice
-- `` for neutral contextual information
-- `` for success confirmations
-
-### Code examples
-
-- When appropriate, include complete, runnable examples
-- Use `` for multiple language examples
-- Specify language tags on all code blocks
-- Include realistic data, not placeholders
-- Use `` and `` for API docs
-
-### Procedures
-
-- Use `` component for sequential instructions
-- Include verification steps with `` components when relevant
-- Break complex procedures into smaller steps
-
-### Content organization
-
-- Use `` for platform-specific content
-- Use `` for progressive disclosure
-- Use `` and `` for highlighting content
-- Wrap images in `` components with descriptive alt text
-
-## API documentation requirements
-
-- Document all parameters with ``
-- Show response structure with ``
-- Include both success and error examples
-- Use `` for nested object properties
-- Always include authentication examples
-
-## Quality standards
-
-- Test all code examples before publishing
-- Use relative paths for internal links
-- Include alt text for all images
-- Ensure proper heading hierarchy (start with h2)
-- Check existing patterns for consistency
-````
diff --git a/api-features/advanced-features.mdx b/api-features/advanced-features.mdx
new file mode 100644
index 0000000..144800b
--- /dev/null
+++ b/api-features/advanced-features.mdx
@@ -0,0 +1,475 @@
+---
+title: "Advanced Features"
+description: "Webhooks, fee handling, custom metadata, and enterprise-grade capabilities"
+---
+
+## Overview
+
+Request Network provides advanced features that enable enterprise-grade payment processing, real-time integrations, and sophisticated business logic. These capabilities ensure your payment infrastructure can scale with your business needs.
+
+## Webhooks & Real-Time Updates
+
+### Webhook Events
+Stay synchronized with payment events through real-time webhook notifications.
+
+
+
+ **Event Types:**
+ - `payment_detected` - Payment initiated
+ - `payment_confirmed` - Payment confirmed on blockchain
+ - `payment_failed` - Payment failed or rejected
+
+ **Use Cases:** Order fulfillment, inventory updates, customer notifications
+
+
+
+ **Event Types:**
+ - `request_created` - New payment request created
+ - `request_updated` - Request metadata or status changed
+ - `request_cancelled` - Request cancelled by merchant
+
+ **Use Cases:** CRM integration, accounting system updates
+
+
+
+
+
+ **Event Types:**
+ - `subscription_activated` - New subscription started
+ - `subscription_renewed` - Successful recurring payment
+ - `subscription_failed` - Recurring payment failed
+ - `subscription_cancelled` - Subscription terminated
+
+ **Use Cases:** [Subscription](/use-cases/subscriptions) management, customer lifecycle
+
+
+
+ **Event Types:**
+ - `payout_initiated` - Payout process started
+ - `payout_completed` - Payout successfully sent
+ - `batch_payout_completed` - All batch payments processed
+
+ **Use Cases:** [Payroll](/use-cases/payroll) confirmation, vendor notifications
+
+
+
+### Webhook Configuration
+
+
+
+ **Webhook Endpoint Setup:**
+
+ 1. Configure endpoint URL in Request Portal
+ 2. Select event types to receive
+ 3. Set up authentication (optional)
+ 4. Test webhook delivery
+
+ ```javascript
+ // Example webhook endpoint
+ app.post('/webhooks/request-network', (req, res) => {
+ const { eventType, data } = req.body;
+
+ // Verify webhook signature (recommended)
+ if (!verifyWebhookSignature(req)) {
+ return res.status(401).send('Unauthorized');
+ }
+
+ // Process event
+ handlePaymentEvent(eventType, data);
+
+ res.status(200).send('OK');
+ });
+ ```
+
+
+
+ **Webhook Security Best Practices:**
+
+ - **Signature Verification:** Verify webhook authenticity
+ - **HTTPS Only:** Always use secure endpoints
+ - **Idempotency:** Handle duplicate events gracefully
+ - **Rate Limiting:** Implement endpoint rate limiting
+
+ ```javascript
+ function verifyWebhookSignature(req) {
+ const signature = req.headers['x-request-signature'];
+ const payload = JSON.stringify(req.body);
+ const expectedSignature = crypto
+ .createHmac('sha256', webhookSecret)
+ .update(payload)
+ .digest('hex');
+
+ return signature === expectedSignature;
+ }
+ ```
+
+
+
+ **Automatic Retry Handling:**
+
+ - **Retry Schedule:** 1s, 5s, 25s, 125s intervals
+ - **Max Attempts:** Up to 5 retry attempts
+ - **Exponential Backoff:** Increasing delays between retries
+ - **Dead Letter Queue:** Failed events stored for manual review
+
+ **Error Handling:**
+ - Return 2xx status codes for successful processing
+ - Return 4xx for permanent failures (no retry)
+ - Return 5xx for temporary failures (will retry)
+
+
+
+## Platform Fees & Revenue Sharing
+
+### Fee Configuration
+Collect platform fees automatically from every transaction.
+
+
+
+ **Fixed Percentage Model:**
+ - Set percentage fee (e.g., 2.5% per transaction)
+ - Automatic fee calculation and collection
+ - Fees collected to specified address
+ - Real-time fee tracking and reporting
+
+ **Perfect For:** Marketplaces, payment processors, SaaS platforms
+
+
+
+ **Flat Fee Model:**
+ - Set fixed fee amount per transaction
+ - Independent of transaction size
+ - Predictable fee structure
+ - Suitable for high-volume, low-value transactions
+
+ **Perfect For:** Micropayments, subscription services, utility payments
+
+
+
+ **Volume-Based Pricing:**
+ - Different fee rates based on transaction volume
+ - Automatic tier calculation
+ - Incentivize higher volume usage
+ - Enterprise-friendly pricing models
+
+ **Perfect For:** Enterprise platforms, high-volume merchants
+
+
+
+ **Multi-Party Fee Distribution:**
+ - Split fees between multiple parties
+ - Automatic revenue distribution
+ - Configurable split percentages
+ - Real-time settlement
+
+ **Perfect For:** Affiliate programs, partner ecosystems, marketplaces
+
+
+
+### Fee Implementation
+
+
+```javascript Percentage Fee
+const requestWithFee = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USDC-matic',
+ expectedAmount: '1000',
+ // ... other request details
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentAddress: merchantAddress,
+ feeAddress: platformFeeAddress,
+ feeAmount: '25' // 2.5% fee
+ }
+ }
+});
+```
+
+```javascript Fixed Fee
+const requestWithFixedFee = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USDC-matic',
+ expectedAmount: '1000',
+ // ... other request details
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentAddress: merchantAddress,
+ feeAddress: platformFeeAddress,
+ feeAmount: '10' // $10 fixed fee
+ }
+ }
+});
+```
+
+```javascript Multi-Party Split
+const revenueSharingRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USDC-matic',
+ expectedAmount: '1000',
+ // ... other request details
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentAddress: merchantAddress,
+ feeAddress: platformFeeAddress,
+ feeAmount: '50', // 5% to platform
+ additionalFees: [
+ {
+ address: affiliateAddress,
+ amount: '20' // 2% to affiliate
+ }
+ ]
+ }
+ }
+});
+```
+
+
+## Custom Metadata & Business Logic
+
+### Metadata Capabilities
+Attach business-specific data to payment requests and transactions.
+
+
+
+ **Built-in Fields:**
+ - Invoice numbers and references
+ - Customer information
+ - Product/service descriptions
+ - Due dates and payment terms
+ - Tax information and rates
+
+ ```javascript
+ const requestWithMetadata = await requestNetwork.createRequest({
+ // ... request configuration
+ contentData: {
+ reason: 'Professional Services - Q1 2025',
+ invoiceNumber: 'INV-2025-001',
+ dueDate: '2025-04-01',
+ customerInfo: {
+ name: 'Acme Corporation',
+ email: 'billing@acme.com',
+ taxId: 'US123456789'
+ },
+ lineItems: [
+ {
+ description: 'Consulting Services',
+ quantity: 40,
+ unitPrice: '150',
+ total: '6000'
+ }
+ ]
+ }
+ });
+ ```
+
+
+
+ **Flexible Schema:**
+ - Add any JSON-compatible data
+ - Business-specific identifiers
+ - Integration system references
+ - Custom workflow states
+
+ ```javascript
+ const customMetadata = {
+ // Standard invoice data
+ reason: 'Software License Renewal',
+ invoiceNumber: 'LIC-2025-456',
+
+ // Custom business fields
+ customFields: {
+ salesRepId: 'REP-001',
+ contractNumber: 'CON-2025-789',
+ departmentCode: 'IT-DEV',
+ projectId: 'PROJ-ALPHA',
+ approvalRequired: true,
+ priority: 'high'
+ },
+
+ // Integration references
+ externalSystems: {
+ crmId: 'SFDC-12345',
+ erpOrderId: 'ERP-ORD-789',
+ ticketNumber: 'TICKET-456'
+ }
+ };
+ ```
+
+
+
+ **Query Capabilities:**
+ - Search requests by metadata fields
+ - Filter by custom attributes
+ - Generate custom reports
+ - Business intelligence integration
+
+ ```javascript
+ // Search requests by metadata
+ const requests = await requestNetwork.searchRequests({
+ filters: {
+ 'contentData.customFields.departmentCode': 'IT-DEV',
+ 'contentData.customFields.priority': 'high',
+ createdAt: {
+ gte: '2025-01-01',
+ lte: '2025-03-31'
+ }
+ }
+ });
+ ```
+
+
+
+## Error Handling & Resilience
+
+### Payment Failure Management
+Robust error handling ensures reliable payment processing.
+
+
+
+ **Smart Retry Mechanisms:**
+ - Automatic retry for transient failures
+ - Exponential backoff strategies
+ - Maximum retry attempt limits
+ - Configurable retry policies
+
+ **Failure Types:**
+ - Network connectivity issues
+ - Temporary blockchain congestion
+ - Insufficient gas fee scenarios
+
+
+
+ **Payment Grace Handling:**
+ - Configurable grace periods for late payments
+ - Automatic payment retry scheduling
+ - Customer notification workflows
+ - Account suspension management
+
+ **Use Cases:** [Subscription](/use-cases/subscriptions) billing, enterprise accounts
+
+
+
+### Error Response Handling
+
+
+```javascript Error Handling
+try {
+ const payment = await requestNetwork.payRequest(requestId, {
+ amount: paymentAmount,
+ currency: paymentCurrency
+ });
+
+ console.log('Payment successful:', payment.transactionHash);
+
+} catch (error) {
+ switch (error.code) {
+ case 'INSUFFICIENT_FUNDS':
+ // Handle insufficient balance
+ showInsufficientFundsError();
+ break;
+
+ case 'NETWORK_ERROR':
+ // Retry payment after delay
+ setTimeout(() => retryPayment(requestId), 5000);
+ break;
+
+ case 'INVALID_REQUEST':
+ // Handle invalid request (don't retry)
+ showInvalidRequestError();
+ break;
+
+ default:
+ // Generic error handling
+ showGenericPaymentError();
+ }
+}
+```
+
+```javascript Webhook Error Handling
+app.post('/webhook/payment-events', async (req, res) => {
+ try {
+ const { eventType, data } = req.body;
+
+ // Process event with error handling
+ await processPaymentEvent(eventType, data);
+
+ res.status(200).send('OK');
+
+ } catch (error) {
+ console.error('Webhook processing error:', error);
+
+ // Return appropriate status code
+ if (error.type === 'PERMANENT_ERROR') {
+ res.status(400).send('Bad Request');
+ } else {
+ res.status(500).send('Internal Server Error');
+ }
+ }
+});
+```
+
+
+## Performance & Optimization
+
+### Gas Fee Optimization
+Minimize transaction costs through intelligent optimization.
+
+
+
+ **Efficient Batch Processing:**
+ - Multiple payments in single transaction
+ - Shared gas costs across recipients
+ - Up to 90% gas savings for batch operations
+ - Atomic execution guarantees
+
+
+
+ **Optimal Network Routing:**
+ - Automatic network selection based on cost
+ - Real-time gas price monitoring
+ - Cross-chain routing for best rates
+ - User preference consideration
+
+
+
+ **Smart Timing Strategies:**
+ - Off-peak transaction scheduling
+ - Gas price prediction and queuing
+ - Priority fee optimization
+ - Network congestion avoidance
+
+
+
+## What's Next?
+
+
+
+ Learn common integration patterns and best practices
+
+
+
+ Detailed webhook and API endpoint documentation
+
+
+
+ Configure webhooks and advanced features
+
+
diff --git a/api-features/integration-patterns.mdx b/api-features/integration-patterns.mdx
new file mode 100644
index 0000000..5335601
--- /dev/null
+++ b/api-features/integration-patterns.mdx
@@ -0,0 +1,677 @@
+---
+title: "Integration Patterns"
+description: "Common integration patterns, best practices, and architectural guidance for Request Network implementations"
+---
+
+## Overview
+
+This guide covers proven integration patterns, architectural best practices, and common implementation approaches for Request Network. Whether you're building a simple invoicing system or a complex multi-tenant platform, these patterns will help you implement robust, scalable payment infrastructure.
+
+## Common Integration Architectures
+
+### Server-Side Integration Pattern
+Recommended for production applications requiring security and control.
+
+
+
+ **Server-Side Flow:**
+ ```
+ Frontend โ Backend API โ Request Network โ Blockchain
+ โ
+ Webhook Handler โ Request Network โ Payment Confirmation
+ โ
+ Business Logic โ Database โ Frontend Updates
+ ```
+
+ **Benefits:**
+ - Secure API key management
+ - Centralized business logic
+ - Reliable webhook handling
+ - Scalable architecture
+
+
+
+ ```javascript
+ // Backend API endpoint
+ app.post('/api/create-invoice', async (req, res) => {
+ try {
+ // Validate request
+ const { amount, currency, customerEmail } = req.body;
+
+ // Create Request Network payment request
+ const paymentRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency,
+ expectedAmount: amount,
+ payee: { type: 'ethereumAddress', value: merchantAddress },
+ payer: { type: 'ethereumAddress', value: customerAddress }
+ },
+ contentData: {
+ reason: 'Invoice Payment',
+ customerEmail,
+ invoiceId: generateInvoiceId()
+ }
+ });
+
+ // Store in database
+ await db.invoices.create({
+ requestId: paymentRequest.requestId,
+ amount,
+ currency,
+ customerEmail,
+ status: 'pending'
+ });
+
+ res.json({
+ requestId: paymentRequest.requestId,
+ paymentUrl: `${baseUrl}/pay/${paymentRequest.requestId}`
+ });
+
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
+ });
+ ```
+
+
+
+ **Security Best Practices:**
+ - API keys stored in environment variables
+ - Request validation and sanitization
+ - Rate limiting on API endpoints
+ - CORS configuration
+ - Webhook signature verification
+
+ ```javascript
+ // Environment configuration
+ const config = {
+ requestNetwork: {
+ apiKey: process.env.REQUEST_NETWORK_API_KEY,
+ webhookSecret: process.env.REQUEST_WEBHOOK_SECRET,
+ environment: process.env.NODE_ENV === 'production' ? 'mainnet' : 'testnet'
+ }
+ };
+
+ // Middleware for API key validation
+ const validateApiKey = (req, res, next) => {
+ const apiKey = req.headers['x-api-key'];
+ if (!apiKey || !isValidApiKey(apiKey)) {
+ return res.status(401).json({ error: 'Invalid API key' });
+ }
+ next();
+ };
+ ```
+
+
+
+### Client-Side Integration Pattern
+Suitable for simple applications and rapid prototyping.
+
+
+
+ **Client-Side Flow:**
+ ```
+ Frontend App โ Request Network SDK โ Blockchain
+ โ
+ Payment Widget โ Wallet Connection โ Transaction
+ โ
+ Confirmation โ Frontend Updates โ Backend Sync
+ ```
+
+ **Benefits:**
+ - Faster development
+ - Reduced backend complexity
+ - Real-time user feedback
+ - Lower infrastructure costs
+
+
+
+ ```javascript
+ // Frontend payment component
+ import { RequestNetwork } from '@requestnetwork/request-client.js';
+
+ function PaymentComponent({ invoiceData }) {
+ const [paymentStatus, setPaymentStatus] = useState('pending');
+
+ const handlePayment = async () => {
+ try {
+ setPaymentStatus('processing');
+
+ // Create payment request
+ const request = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: invoiceData.currency,
+ expectedAmount: invoiceData.amount,
+ payee: { type: 'ethereumAddress', value: merchantAddress }
+ }
+ });
+
+ // Process payment
+ const payment = await request.pay();
+
+ setPaymentStatus('completed');
+ onPaymentSuccess(payment);
+
+ } catch (error) {
+ setPaymentStatus('failed');
+ onPaymentError(error);
+ }
+ };
+
+ return (
+
+ );
+ }
+ ```
+
+
+
+ **Consider These Limitations:**
+ - API keys exposed to frontend
+ - Limited server-side validation
+ - Webhook handling requires backend
+ - Less suitable for production systems
+
+ **When to Use:**
+ - Prototyping and demos
+ - Simple payment collection
+ - Low-volume applications
+ - Educational purposes
+
+
+
+## E-commerce Integration Patterns
+
+### Shopify Integration
+Connect Request Network with Shopify for crypto payment acceptance.
+
+
+
+ **Integration Components:**
+ - Shopify App with payment gateway registration
+ - Backend service for Request Network integration
+ - Webhook handlers for payment confirmation
+ - Admin dashboard for configuration
+
+ **Flow:**
+ 1. Customer selects crypto payment at checkout
+ 2. Shopify redirects to Request Network payment page
+ 3. Customer completes crypto payment
+ 4. Webhook confirms payment to Shopify
+ 5. Order status updated automatically
+
+
+
+ ```javascript
+ // Shopify payment gateway endpoint
+ app.post('/shopify/payment/create', async (req, res) => {
+ const { order, return_url, cancel_url } = req.body;
+
+ // Create Request Network payment request
+ const paymentRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USD',
+ expectedAmount: order.total_price,
+ payee: { type: 'ethereumAddress', value: merchantAddress }
+ },
+ contentData: {
+ reason: `Shopify Order #${order.order_number}`,
+ shopifyOrderId: order.id,
+ returnUrl: return_url,
+ cancelUrl: cancel_url
+ }
+ });
+
+ // Redirect to payment page
+ res.redirect(`/pay/${paymentRequest.requestId}`);
+ });
+
+ // Payment confirmation webhook
+ app.post('/webhook/payment-confirmed', async (req, res) => {
+ const { requestId, paymentHash } = req.body;
+
+ // Get order info from Request Network
+ const request = await requestNetwork.getRequest(requestId);
+ const shopifyOrderId = request.contentData.shopifyOrderId;
+
+ // Update Shopify order status
+ await shopifyAPI.orders.update(shopifyOrderId, {
+ financial_status: 'paid',
+ transactions: [{
+ kind: 'sale',
+ status: 'success',
+ amount: request.expectedAmount,
+ gateway: 'request-network'
+ }]
+ });
+
+ res.status(200).send('OK');
+ });
+ ```
+
+
+
+### WooCommerce Integration
+Enable crypto payments in WordPress/WooCommerce stores.
+
+
+
+ **WordPress Plugin Structure:**
+ - Payment gateway plugin registration
+ - Admin settings page for configuration
+ - Checkout integration hooks
+ - Order status management
+
+ **Key Features:**
+ - Seamless checkout experience
+ - Automatic order fulfillment
+ - Refund handling
+ - Multi-currency support
+
+
+
+ ```php
+ id = 'request_network';
+ $this->method_title = 'Request Network';
+ $this->method_description = 'Accept crypto payments via Request Network';
+
+ $this->init_form_fields();
+ $this->init_settings();
+
+ // Hook into WooCommerce
+ add_action('woocommerce_update_options_payment_gateways_' . $this->id,
+ array($this, 'process_admin_options'));
+ add_action('woocommerce_api_request_network_webhook',
+ array($this, 'handle_webhook'));
+ }
+
+ public function process_payment($order_id) {
+ $order = wc_get_order($order_id);
+
+ // Create Request Network payment request
+ $response = wp_remote_post($this->api_endpoint . '/create-request', array(
+ 'body' => json_encode(array(
+ 'amount' => $order->get_total(),
+ 'currency' => $order->get_currency(),
+ 'order_id' => $order_id,
+ 'return_url' => $this->get_return_url($order)
+ )),
+ 'headers' => array(
+ 'Content-Type' => 'application/json',
+ 'Authorization' => 'Bearer ' . $this->api_key
+ )
+ ));
+
+ $payment_data = json_decode(wp_remote_retrieve_body($response), true);
+
+ // Redirect to payment page
+ return array(
+ 'result' => 'success',
+ 'redirect' => $payment_data['payment_url']
+ );
+ }
+ }
+ ```
+
+
+
+## SaaS & Subscription Patterns
+
+### Multi-Tenant SaaS Architecture
+Scale Request Network for multiple customers in a SaaS platform.
+
+
+
+ **Isolation Strategy:**
+ - Separate API keys per tenant
+ - Namespace separation for requests
+ - Isolated webhook endpoints
+ - Tenant-specific fee structures
+
+ ```javascript
+ // Tenant-aware request creation
+ async function createTenantRequest(tenantId, requestData) {
+ const tenantConfig = await getTenantConfig(tenantId);
+
+ const request = await requestNetwork.createRequest({
+ ...requestData,
+ contentData: {
+ ...requestData.contentData,
+ tenantId,
+ tenantDomain: tenantConfig.domain
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentAddress: tenantConfig.walletAddress,
+ feeAddress: platformFeeAddress,
+ feeAmount: tenantConfig.platformFeePercentage
+ }
+ }
+ }, {
+ apiKey: tenantConfig.requestNetworkApiKey
+ });
+
+ return request;
+ }
+ ```
+
+
+
+ **Multi-Tenant Webhook Handling:**
+ - Single webhook endpoint for all tenants
+ - Route events based on tenant identification
+ - Isolated processing per tenant
+ - Failover and retry mechanisms
+
+ ```javascript
+ app.post('/webhook/payment-events', async (req, res) => {
+ try {
+ const { eventType, data } = req.body;
+ const tenantId = data.contentData?.tenantId;
+
+ if (!tenantId) {
+ return res.status(400).send('Missing tenant ID');
+ }
+
+ // Route to tenant-specific handler
+ const tenantHandler = getTenantHandler(tenantId);
+ await tenantHandler.processEvent(eventType, data);
+
+ res.status(200).send('OK');
+
+ } catch (error) {
+ console.error('Webhook error:', error);
+ res.status(500).send('Error processing webhook');
+ }
+ });
+ ```
+
+
+
+ **SaaS Billing Patterns:**
+ - Usage-based billing with Request Network
+ - Platform fees from tenant transactions
+ - Automated billing for SaaS subscriptions
+ - Revenue sharing with tenants
+
+ ```javascript
+ // Calculate and charge platform fees
+ async function processPlatformBilling(tenantId, billingPeriod) {
+ const usage = await getUsageMetrics(tenantId, billingPeriod);
+ const tenantConfig = await getTenantConfig(tenantId);
+
+ const platformFee = calculatePlatformFee(usage, tenantConfig.pricingTier);
+
+ // Create platform billing request
+ const billingRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USD',
+ expectedAmount: platformFee.toString(),
+ payee: { type: 'ethereumAddress', value: platformWalletAddress },
+ payer: { type: 'ethereumAddress', value: tenantConfig.walletAddress }
+ },
+ contentData: {
+ reason: `Platform Fee - ${billingPeriod}`,
+ tenantId,
+ usageMetrics: usage,
+ feeBreakdown: platformFee.breakdown
+ }
+ });
+
+ return billingRequest;
+ }
+ ```
+
+
+
+## Enterprise Integration Patterns
+
+### ERP System Integration
+Connect Request Network with enterprise resource planning systems.
+
+
+
+ **SAP S/4HANA Integration:**
+ - Invoice creation from SAP sales orders
+ - Payment status synchronization
+ - Automatic accounting document creation
+ - Multi-company and multi-currency support
+
+ ```javascript
+ // SAP integration service
+ class SAPRequestNetworkIntegration {
+ async createInvoiceFromSalesOrder(salesOrderId) {
+ // Fetch sales order from SAP
+ const salesOrder = await this.sapAPI.getSalesOrder(salesOrderId);
+
+ // Create Request Network payment request
+ const paymentRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: salesOrder.currency,
+ expectedAmount: salesOrder.totalAmount,
+ payee: { type: 'ethereumAddress', value: companyWalletAddress }
+ },
+ contentData: {
+ reason: `Invoice for Sales Order ${salesOrderId}`,
+ sapSalesOrderId: salesOrderId,
+ sapCustomerId: salesOrder.customerId,
+ sapCompanyCode: salesOrder.companyCode
+ }
+ });
+
+ // Update SAP with Request Network details
+ await this.sapAPI.updateSalesOrder(salesOrderId, {
+ paymentRequestId: paymentRequest.requestId,
+ paymentStatus: 'pending'
+ });
+
+ return paymentRequest;
+ }
+ }
+ ```
+
+
+
+ **NetSuite Integration Pattern:**
+ - SuiteScript for Request Network communication
+ - Custom records for payment tracking
+ - Automated journal entry creation
+ - Revenue recognition automation
+
+
+
+ **Dynamics 365 Integration:**
+ - Power Platform connectors
+ - Custom API integration
+ - Automated invoice processing
+ - Financial reporting integration
+
+
+
+## Development Best Practices
+
+### Error Handling Strategies
+
+
+```javascript Retry Pattern
+class RequestNetworkClient {
+ async createRequestWithRetry(requestData, maxRetries = 3) {
+ let lastError;
+
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
+ try {
+ return await requestNetwork.createRequest(requestData);
+ } catch (error) {
+ lastError = error;
+
+ // Don't retry on permanent errors
+ if (error.code === 'INVALID_REQUEST' || error.code === 'UNAUTHORIZED') {
+ throw error;
+ }
+
+ // Exponential backoff
+ const delay = Math.pow(2, attempt) * 1000;
+ await new Promise(resolve => setTimeout(resolve, delay));
+
+ console.log(`Request creation attempt ${attempt} failed, retrying...`);
+ }
+ }
+
+ throw lastError;
+ }
+}
+```
+
+```javascript Circuit Breaker
+class CircuitBreaker {
+ constructor(threshold = 5, timeout = 60000) {
+ this.failureThreshold = threshold;
+ this.timeout = timeout;
+ this.failureCount = 0;
+ this.state = 'CLOSED'; // CLOSED, OPEN, HALF_OPEN
+ this.nextAttempt = null;
+ }
+
+ async call(fn) {
+ if (this.state === 'OPEN') {
+ if (Date.now() < this.nextAttempt) {
+ throw new Error('Circuit breaker is OPEN');
+ }
+ this.state = 'HALF_OPEN';
+ }
+
+ try {
+ const result = await fn();
+ this.onSuccess();
+ return result;
+ } catch (error) {
+ this.onFailure();
+ throw error;
+ }
+ }
+
+ onSuccess() {
+ this.failureCount = 0;
+ this.state = 'CLOSED';
+ }
+
+ onFailure() {
+ this.failureCount++;
+ if (this.failureCount >= this.failureThreshold) {
+ this.state = 'OPEN';
+ this.nextAttempt = Date.now() + this.timeout;
+ }
+ }
+}
+```
+
+
+### Performance Optimization
+
+
+
+ **Cache Request Data:**
+ ```javascript
+ // Redis caching for request data
+ const redis = new Redis(process.env.REDIS_URL);
+
+ async function getCachedRequest(requestId) {
+ const cacheKey = `request:${requestId}`;
+ const cached = await redis.get(cacheKey);
+
+ if (cached) {
+ return JSON.parse(cached);
+ }
+
+ const request = await requestNetwork.getRequest(requestId);
+ await redis.setex(cacheKey, 300, JSON.stringify(request)); // 5 min cache
+
+ return request;
+ }
+ ```
+
+
+
+ **Optimize Batch Operations:**
+ ```javascript
+ // Batch multiple operations
+ async function processBatchPayments(payments) {
+ const batchSize = 10;
+ const batches = [];
+
+ for (let i = 0; i < payments.length; i += batchSize) {
+ batches.push(payments.slice(i, i + batchSize));
+ }
+
+ const results = await Promise.allSettled(
+ batches.map(batch => requestNetwork.createBatchPayout({
+ payouts: batch
+ }))
+ );
+
+ return results;
+ }
+ ```
+
+
+
+ **Optimize Network Connections:**
+ ```javascript
+ // HTTP client with connection pooling
+ const axios = require('axios');
+ const { Agent } = require('https');
+
+ const httpAgent = new Agent({
+ keepAlive: true,
+ maxSockets: 100,
+ maxFreeSockets: 10,
+ timeout: 60000
+ });
+
+ const requestNetworkClient = axios.create({
+ baseURL: 'https://api.request.network',
+ httpsAgent: httpAgent,
+ timeout: 30000
+ });
+ ```
+
+
+
+## What's Next?
+
+
+
+ Detailed API endpoint documentation and examples
+
+
+
+ Set up your development environment and API keys
+
+
+
+ Explore specific implementation scenarios
+
+
diff --git a/api-features/payment-types.mdx b/api-features/payment-types.mdx
new file mode 100644
index 0000000..041d167
--- /dev/null
+++ b/api-features/payment-types.mdx
@@ -0,0 +1,350 @@
+---
+title: "Payment Types"
+description: "Comprehensive guide to Request Network's payment capabilities and transaction types"
+---
+
+## Overview
+
+Request Network supports multiple payment types to accommodate different business needs and transaction patterns. From simple direct payments to complex cross-chain transactions, our payment infrastructure provides the flexibility to handle any payment scenario.
+
+## Standard Payments
+
+### Direct Payments (Payouts)
+Send payments immediately without creating a request first. Perfect for vendor payments, contractor payouts, and one-time transfers.
+
+
+
+ **Use Case:** Individual vendor payments, contractor fees
+
+ **Features:**
+ - Instant payment execution
+ - Real-time confirmation
+ - Automatic payment records
+
+ **Best For:** [Payouts](/use-cases/payouts), [Payroll](/use-cases/payroll)
+
+
+
+ **Use Case:** Payroll processing, multiple vendor payments
+
+ **Features:**
+ - Multiple recipients in one transaction
+ - Gas cost optimization
+ - Atomic transaction processing
+
+ **Best For:** [Payroll](/use-cases/payroll), bulk [Payouts](/use-cases/payouts)
+
+
+
+### Request-Based Payments (Invoicing)
+Create payment requests first, then allow customers to pay. Ideal for invoicing, e-commerce checkout, and formal payment collection.
+
+
+
+ **Use Case:** Professional invoicing, B2B payments
+
+ **Features:**
+ - Payment request creation
+ - Customer payment portal
+ - Payment tracking and reconciliation
+
+ **Best For:** [Invoicing](/use-cases/invoicing), formal payment collection
+
+
+
+ **Use Case:** E-commerce, digital goods, services
+
+ **Features:**
+ - Embedded payment widgets
+ - Real-time payment confirmation
+ - Order reconciliation
+
+ **Best For:** [Checkout](/use-cases/checkout), e-commerce integration
+
+
+
+## Advanced Payment Types
+
+### Cross-Chain Payments
+Enable payments across different blockchain networks with automatic routing and optimization.
+
+
+
+ **Cross-Chain Payment Flow:**
+ 1. Customer selects preferred payment chain
+ 2. Request Network routes payment optimally
+ 3. Merchant receives payment on their preferred chain
+ 4. Automatic bridging and conversion handled transparently
+
+ **Supported Networks:**
+ - Ethereum, Polygon, Arbitrum, Optimism
+ - Base, BSC, Avalanche, Fantom
+ - Gnosis Chain, Celo
+
+
+
+ **For Merchants:**
+ - Accept payments from any supported chain
+ - Receive payments on preferred network
+ - Reduced friction for customers
+
+ **For Customers:**
+ - Pay with assets on any chain
+ - No manual bridging required
+ - Optimal routing for lowest fees
+
+
+
+ **Perfect For:**
+ - Global e-commerce platforms
+ - Multi-chain DeFi applications
+ - International B2B payments
+ - Cross-border transactions
+
+
+
+### Conversion Payments (Crypto-to-Fiat)
+Accept payments in crypto while receiving fiat currency, or invoice in fiat while accepting crypto payments.
+
+
+
+ **Business Scenario:** You want to price in familiar fiat terms but receive crypto
+
+ - Set invoice amount in USD
+ - Customer sees real-time crypto equivalent
+ - You receive payment in your preferred cryptocurrency
+ - Automatic price conversion at payment time
+
+
+
+ **Business Scenario:** You want crypto exposure for pricing but fiat for operations
+
+ - Set invoice amount in cryptocurrency
+ - Automatic conversion to fiat upon payment
+ - Receive fiat in your business bank account
+ - Eliminate crypto volatility risk
+
+
+
+ **Business Scenario:** Accept both crypto and fiat based on customer preference
+
+ - Customers choose payment currency
+ - You specify preferred receiving currency
+ - Automatic conversion and settlement
+ - Unified payment reconciliation
+
+
+
+### Recurring Payments
+Automate subscription billing and recurring payment collection with flexible scheduling.
+
+
+
+ **Frequency Options:**
+ - Weekly, bi-weekly, monthly
+ - Quarterly, semi-annual, annual
+ - Custom intervals
+
+ **Perfect For:** [Subscriptions](/use-cases/subscriptions), SaaS billing
+
+
+
+ **Automation Features:**
+ - Scheduled vendor payments
+ - Automated payroll processing
+ - Recurring retainer payments
+
+ **Perfect For:** [Payroll](/use-cases/payroll), vendor management
+
+
+
+ **Advanced Options:**
+ - Pro-rated billing periods
+ - Grace periods for failed payments
+ - Automatic retry logic
+
+ **Perfect For:** Complex billing scenarios
+
+
+
+## Payment Implementation Patterns
+
+### Payment Request Lifecycle
+
+
+
+ Create payment request with amount, currency, and metadata
+
+
+ Share payment link or embed payment widget
+
+
+ Customer completes payment using their preferred method
+
+
+ Automatic payment detection and business system updates
+
+
+
+### Direct Payout Flow
+
+
+
+ Specify recipient address, amount, and payment currency
+
+
+ Payment sent immediately to recipient's wallet
+
+
+ Real-time transaction confirmation and record creation
+
+
+ Automatic payment record creation for accounting
+
+
+
+## Technical Implementation
+
+
+```javascript Payment Request
+import { RequestNetwork } from '@requestnetwork/request-client.js';
+
+// Create a payment request
+const paymentRequest = await requestNetwork.createRequest({
+ requestInfo: {
+ currency: 'USD',
+ expectedAmount: '1000',
+ payee: {
+ type: 'ethereumAddress',
+ value: merchantAddress
+ },
+ payer: {
+ type: 'ethereumAddress',
+ value: customerAddress
+ }
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentNetworkName: 'matic',
+ paymentAddress: merchantAddress,
+ feeAddress: platformFeeAddress,
+ feeAmount: '50' // 5% platform fee
+ }
+ },
+ contentData: {
+ reason: 'Invoice #INV-001',
+ dueDate: '2025-10-01'
+ }
+});
+```
+
+```javascript Direct Payout
+// Send direct payout
+const payout = await requestNetwork.createPayout({
+ payoutInfo: {
+ currency: 'USDC-matic',
+ amount: '1000',
+ recipient: vendorAddress,
+ reason: 'Vendor Payment - Project ABC'
+ },
+ paymentNetwork: {
+ id: 'erc20-fee-proxy-contract',
+ parameters: {
+ paymentNetworkName: 'matic'
+ }
+ }
+});
+```
+
+```javascript Batch Processing
+// Process batch payments
+const batchPayout = await requestNetwork.createBatchPayout({
+ payouts: [
+ {
+ currency: 'USDC-matic',
+ amount: '2000',
+ recipient: employee1Address,
+ reason: 'Salary - March 2025'
+ },
+ {
+ currency: 'USDC-matic',
+ amount: '2500',
+ recipient: employee2Address,
+ reason: 'Salary - March 2025'
+ }
+ ],
+ batchSettings: {
+ gasOptimization: true,
+ atomicExecution: true
+ }
+});
+```
+
+
+## Currency Support
+
+
+
+ **553+ Currencies Across 10 EVM Chains**
+
+ **Major Cryptocurrencies:**
+ - ETH, BTC, USDC, USDT, DAI
+ - MATIC, AVAX, BNB, FTM
+ - Hundreds of ERC-20 tokens
+
+ **Fiat Currencies:**
+ - USD, EUR, GBP, JPY
+ - 150+ international currencies
+
+ [View Complete List โ](/resources/supported-chains-and-currencies)
+
+
+
+ **10 EVM-Compatible Networks:**
+ - Ethereum Mainnet & Sepolia
+ - Polygon & Mumbai
+ - Arbitrum One & Sepolia
+ - Optimism & Sepolia
+ - Base & Sepolia
+ - And more...
+
+ [Chain Details โ](/resources/supported-chains-and-currencies)
+
+
+
+ **Real-Time Price Feeds:**
+ - Chainlink price oracles
+ - Multiple data source aggregation
+ - Sub-minute price updates
+ - Slippage protection
+
+
+
+## What's Next?
+
+
+
+ Explore webhooks, fees, and metadata capabilities
+
+
+
+ Learn common integration patterns and best practices
+
+
+
+ Detailed API endpoint documentation
+
+
diff --git a/api-reference/authentication.mdx b/api-reference/authentication.mdx
new file mode 100644
index 0000000..05723d5
--- /dev/null
+++ b/api-reference/authentication.mdx
@@ -0,0 +1,218 @@
+---
+title: "Authentication"
+description: "API authentication, key management, and security best practices"
+---
+
+## Authentication Overview
+
+Request Network API uses API key authentication to secure access to endpoints. This guide covers how to obtain, manage, and use your API keys securely.
+
+## Getting API Keys
+
+
+
+ Sign up for a Request Network account at the [Request Portal](https://portal.request.network)
+
+
+ Navigate to the API Keys section and create a new API key for your project
+
+
+ Store your API key securely in environment variables
+
+
+ Make your first authenticated API call to verify setup
+
+
+
+## API Key Management
+
+
+
+ **Production Environment:**
+ - Use separate keys for production
+ - Implement key rotation policies
+ - Monitor usage and access logs
+ - Set up rate limiting and alerts
+
+
+
+ **Development Environment:**
+ - Use testnet for development
+ - Separate keys for each environment
+ - Team access management
+ - Testing and debugging tools
+
+
+
+## Authentication Methods
+
+
+
+ **API Key in Header (Recommended):**
+
+ ```bash
+ curl -X POST https://api.request.network/v2/requests \
+ -H "Authorization: Bearer YOUR_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "currency": "USD",
+ "expectedAmount": "100",
+ "payeeIdentity": "0x...",
+ "reason": "Test invoice"
+ }'
+ ```
+
+
+
+ **Secure Key Storage:**
+
+ ```javascript
+ // .env file
+ REQUEST_NETWORK_API_KEY=your_api_key_here
+ REQUEST_NETWORK_ENVIRONMENT=testnet
+
+ // Application code
+ const requestNetwork = new RequestNetwork({
+ apiKey: process.env.REQUEST_NETWORK_API_KEY,
+ environment: process.env.REQUEST_NETWORK_ENVIRONMENT
+ });
+ ```
+
+
+
+ **SDK Authentication:**
+
+ ```javascript
+ import { RequestNetwork } from '@requestnetwork/request-client.js';
+
+ const requestNetwork = new RequestNetwork({
+ apiKey: process.env.REQUEST_NETWORK_API_KEY,
+ nodeConnectionConfig: {
+ baseURL: 'https://api.request.network'
+ }
+ });
+ ```
+
+
+
+## Security Best Practices
+
+
+
+ **Protect Your API Keys:**
+ - Never commit API keys to version control
+ - Use environment variables for key storage
+ - Implement key rotation policies
+ - Monitor for unauthorized usage
+ - Use different keys for different environments
+
+
+
+ **Secure Communication:**
+ - Always use HTTPS for API calls
+ - Implement request signing for sensitive operations
+ - Use webhook signature verification
+ - Implement rate limiting on your endpoints
+
+
+
+ **Manage Access:**
+ - Use principle of least privilege
+ - Implement role-based access control
+ - Regular access audits
+ - Immediate revocation of compromised keys
+
+
+
+## Rate Limits
+
+
+**Rate Limiting Information**
+
+Current rate limits apply to API usage. Contact support for enterprise rate limit increases.
+
+
+
+
+ **Default Rate Limits:**
+ - 100 requests per minute
+ - 1,000 requests per hour
+ - 10,000 requests per day
+
+ **Applies to:** Most API endpoints
+
+
+
+ **Webhook Rate Limits:**
+ - 50 webhook deliveries per minute
+ - Exponential backoff for retries
+ - Maximum 5 retry attempts
+
+ **Applies to:** Webhook delivery endpoints
+
+
+
+## Error Codes
+
+Common authentication error responses:
+
+
+```json 401 Unauthorized
+{
+ "error": {
+ "code": "UNAUTHORIZED",
+ "message": "Invalid or missing API key",
+ "details": "Please provide a valid API key in the Authorization header"
+ }
+}
+```
+
+```json 403 Forbidden
+{
+ "error": {
+ "code": "FORBIDDEN",
+ "message": "API key does not have required permissions",
+ "details": "This operation requires additional permissions"
+ }
+}
+```
+
+```json 429 Rate Limited
+{
+ "error": {
+ "code": "RATE_LIMITED",
+ "message": "Rate limit exceeded",
+ "details": "Too many requests. Please try again later.",
+ "retryAfter": 60
+ }
+}
+```
+
+
+## What's Next?
+
+
+
+ Set up real-time event notifications
+
+
+
+ Make your first API call
+
+
+
+ Manage your API keys and settings
+
+
diff --git a/api-reference/endpoint/create.mdx b/api-reference/endpoint/create.mdx
deleted file mode 100644
index 5689f1b..0000000
--- a/api-reference/endpoint/create.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Create Plant'
-openapi: 'POST /plants'
----
diff --git a/api-reference/endpoint/delete.mdx b/api-reference/endpoint/delete.mdx
deleted file mode 100644
index 657dfc8..0000000
--- a/api-reference/endpoint/delete.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Delete Plant'
-openapi: 'DELETE /plants/{id}'
----
diff --git a/api-reference/endpoint/get.mdx b/api-reference/endpoint/get.mdx
deleted file mode 100644
index 56aa09e..0000000
--- a/api-reference/endpoint/get.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Get Plants'
-openapi: 'GET /plants'
----
diff --git a/api-reference/endpoint/webhook.mdx b/api-reference/endpoint/webhook.mdx
deleted file mode 100644
index 3291340..0000000
--- a/api-reference/endpoint/webhook.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'New Plant'
-openapi: 'WEBHOOK /plant/webhook'
----
diff --git a/api-reference/introduction.mdx b/api-reference/introduction.mdx
deleted file mode 100644
index c835b78..0000000
--- a/api-reference/introduction.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: 'Introduction'
-description: 'Example section for showcasing API endpoints'
----
-
-
- If you're not looking to build API reference documentation, you can delete
- this section by removing the api-reference folder.
-
-
-## Welcome
-
-There are two ways to build API documentation: [OpenAPI](https://mintlify.com/docs/api-playground/openapi/setup) and [MDX components](https://mintlify.com/docs/api-playground/mdx/configuration). For the starter kit, we are using the following OpenAPI specification.
-
-
- View the OpenAPI specification file
-
-
-## Authentication
-
-All API endpoints are authenticated using Bearer tokens and picked up from the specification file.
-
-```json
-"security": [
- {
- "bearerAuth": []
- }
-]
-```
diff --git a/api-reference/openapi.json b/api-reference/openapi.json
deleted file mode 100644
index da5326e..0000000
--- a/api-reference/openapi.json
+++ /dev/null
@@ -1,217 +0,0 @@
-{
- "openapi": "3.1.0",
- "info": {
- "title": "OpenAPI Plant Store",
- "description": "A sample API that uses a plant store as an example to demonstrate features in the OpenAPI specification",
- "license": {
- "name": "MIT"
- },
- "version": "1.0.0"
- },
- "servers": [
- {
- "url": "http://sandbox.mintlify.com"
- }
- ],
- "security": [
- {
- "bearerAuth": []
- }
- ],
- "paths": {
- "/plants": {
- "get": {
- "description": "Returns all plants from the system that the user has access to",
- "parameters": [
- {
- "name": "limit",
- "in": "query",
- "description": "The maximum number of results to return",
- "schema": {
- "type": "integer",
- "format": "int32"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Plant response",
- "content": {
- "application/json": {
- "schema": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Plant"
- }
- }
- }
- }
- },
- "400": {
- "description": "Unexpected error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/Error"
- }
- }
- }
- }
- }
- },
- "post": {
- "description": "Creates a new plant in the store",
- "requestBody": {
- "description": "Plant to add to the store",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/NewPlant"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "description": "plant response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/Plant"
- }
- }
- }
- },
- "400": {
- "description": "unexpected error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/Error"
- }
- }
- }
- }
- }
- }
- },
- "/plants/{id}": {
- "delete": {
- "description": "Deletes a single plant based on the ID supplied",
- "parameters": [
- {
- "name": "id",
- "in": "path",
- "description": "ID of plant to delete",
- "required": true,
- "schema": {
- "type": "integer",
- "format": "int64"
- }
- }
- ],
- "responses": {
- "204": {
- "description": "Plant deleted",
- "content": {}
- },
- "400": {
- "description": "unexpected error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/Error"
- }
- }
- }
- }
- }
- }
- }
- },
- "webhooks": {
- "/plant/webhook": {
- "post": {
- "description": "Information about a new plant added to the store",
- "requestBody": {
- "description": "Plant added to the store",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/NewPlant"
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "Return a 200 status to indicate that the data was received successfully"
- }
- }
- }
- }
- },
- "components": {
- "schemas": {
- "Plant": {
- "required": [
- "name"
- ],
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the plant",
- "type": "string"
- },
- "tag": {
- "description": "Tag to specify the type",
- "type": "string"
- }
- }
- },
- "NewPlant": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Plant"
- },
- {
- "required": [
- "id"
- ],
- "type": "object",
- "properties": {
- "id": {
- "description": "Identification number of the plant",
- "type": "integer",
- "format": "int64"
- }
- }
- }
- ]
- },
- "Error": {
- "required": [
- "error",
- "message"
- ],
- "type": "object",
- "properties": {
- "error": {
- "type": "integer",
- "format": "int32"
- },
- "message": {
- "type": "string"
- }
- }
- }
- },
- "securitySchemes": {
- "bearerAuth": {
- "type": "http",
- "scheme": "bearer"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/api-reference/webhooks.mdx b/api-reference/webhooks.mdx
new file mode 100644
index 0000000..35c5c68
--- /dev/null
+++ b/api-reference/webhooks.mdx
@@ -0,0 +1,521 @@
+---
+title: "Webhooks"
+description: "Real-time event notifications and webhook configuration guide"
+---
+
+## Webhook Overview
+
+Webhooks provide real-time notifications when events occur in your Request Network integration. Instead of polling for updates, webhooks push event data to your application immediately when payments are detected, requests are created, or other significant events happen.
+
+## Webhook Events
+
+### Payment Events
+
+
+
+ **When:** Payment transaction is detected on blockchain
+
+ **Use Cases:**
+ - Show "Payment Pending" status to users
+ - Start order preparation
+ - Send confirmation emails
+
+ **Typical Timing:** Within 1-5 seconds of transaction
+
+
+
+ **When:** Payment is confirmed on blockchain (sufficient confirmations)
+
+ **Use Cases:**
+ - Complete order fulfillment
+ - Update accounting systems
+ - Release digital goods
+
+ **Typical Timing:** 1-15 minutes after payment
+
+
+
+
+
+ **When:** Payment transaction fails or is reverted
+
+ **Use Cases:**
+ - Notify customer of payment failure
+ - Reset order status
+ - Trigger retry workflows
+
+ **Triggers:** Failed transactions, insufficient gas, reverted smart contract calls
+
+
+
+ **When:** Partial payment is received for a request
+
+ **Use Cases:**
+ - Update outstanding balance
+ - Notify of partial payment
+ - Allow additional payments
+
+ **Common Scenarios:** Installment payments, partial order fulfillment
+
+
+
+### Request Events
+
+
+
+ **When:** New payment request is created
+
+ **Payload Includes:**
+ - Request ID and details
+ - Payment information
+ - Custom metadata
+
+ **Use Cases:** CRM integration, analytics tracking
+
+
+
+ **When:** Request metadata or status is modified
+
+ **Payload Includes:**
+ - Updated fields
+ - Previous values
+ - Change timestamp
+
+ **Use Cases:** Audit trails, status synchronization
+
+
+
+### Subscription Events
+
+
+
+ **When:** Recurring payment is successfully processed
+
+ **Use Cases:**
+ - Extend subscription period
+ - Send renewal confirmation
+ - Update billing systems
+
+ **For:** [Subscription](/use-cases/subscriptions) use cases
+
+
+
+ **When:** Recurring payment fails
+
+ **Use Cases:**
+ - Notify customer of failed payment
+ - Initiate payment retry
+ - Manage subscription status
+
+ **Common Causes:** Insufficient funds, expired payment methods
+
+
+
+## Webhook Configuration
+
+### Setting Up Webhooks
+
+
+
+ Set up a webhook endpoint URL in the [Request Portal](https://portal.request.network)
+
+
+ Choose which event types you want to receive
+
+
+ Use the test webhook feature to verify your endpoint
+
+
+ Enable webhooks for production traffic
+
+
+
+### Webhook Endpoint Requirements
+
+
+
+ **Endpoint Specifications:**
+ - Must be publicly accessible HTTPS URL
+ - Should return 2xx status code for successful processing
+ - Timeout limit: 30 seconds
+ - Must handle duplicate events (idempotency)
+
+ ```javascript
+ app.post('/webhooks/request-network', (req, res) => {
+ try {
+ // Process webhook event
+ const { eventType, data } = req.body;
+
+ // Your business logic here
+ processEvent(eventType, data);
+
+ // Return success status
+ res.status(200).send('OK');
+
+ } catch (error) {
+ // Return error status for retry
+ console.error('Webhook processing error:', error);
+ res.status(500).send('Error processing webhook');
+ }
+ });
+ ```
+
+
+
+ **Webhook Security:**
+ - Verify webhook signatures
+ - Use HTTPS only
+ - Implement request validation
+ - Rate limit webhook endpoints
+
+ ```javascript
+ const crypto = require('crypto');
+
+ function verifyWebhookSignature(req) {
+ const signature = req.headers['x-request-signature'];
+ const timestamp = req.headers['x-request-timestamp'];
+ const payload = JSON.stringify(req.body);
+
+ // Verify timestamp (prevent replay attacks)
+ const currentTime = Math.floor(Date.now() / 1000);
+ if (Math.abs(currentTime - timestamp) > 300) { // 5 minute tolerance
+ return false;
+ }
+
+ // Verify signature
+ const expectedSignature = crypto
+ .createHmac('sha256', process.env.WEBHOOK_SECRET)
+ .update(timestamp + payload)
+ .digest('hex');
+
+ return crypto.timingSafeEqual(
+ Buffer.from(signature, 'hex'),
+ Buffer.from(expectedSignature, 'hex')
+ );
+ }
+ ```
+
+
+
+ **Automatic Retries:**
+ - Retry schedule: 1s, 5s, 25s, 125s, 625s
+ - Maximum 5 retry attempts
+ - Exponential backoff with jitter
+ - Dead letter queue for failed webhooks
+
+ **Error Handling:**
+ ```javascript
+ app.post('/webhooks/request-network', async (req, res) => {
+ try {
+ const { eventType, data } = req.body;
+
+ // Process event
+ await processEvent(eventType, data);
+
+ res.status(200).send('OK');
+
+ } catch (error) {
+ if (error.permanent) {
+ // Don't retry permanent errors
+ res.status(400).send('Permanent error');
+ } else {
+ // Retry temporary errors
+ res.status(500).send('Temporary error');
+ }
+ }
+ });
+ ```
+
+
+
+## Webhook Payloads
+
+### Payment Confirmed Event
+
+
+```json Payment Confirmed
+{
+ "eventType": "payment_confirmed",
+ "timestamp": "2025-09-12T10:30:00Z",
+ "data": {
+ "requestId": "req_1234567890abcdef",
+ "paymentReference": "pay_abcdef1234567890",
+ "transactionHash": "0x742d35cc6cf8a8cbeff61cf82c6b8b3b42a67f1d6c1e8a7b9e2f8d5c3a1b0e9f",
+ "blockNumber": 18523456,
+ "networkName": "matic",
+ "amount": "1000000000000000000000", // 1000 USDC (18 decimals)
+ "currency": "USDC-matic",
+ "payerAddress": "0x1234567890123456789012345678901234567890",
+ "payeeAddress": "0x0987654321098765432109876543210987654321",
+ "fees": {
+ "platformFee": "25000000000000000000", // 25 USDC
+ "gasFee": "0.02"
+ },
+ "metadata": {
+ "reason": "Invoice #INV-001",
+ "invoiceNumber": "INV-001",
+ "customerEmail": "customer@example.com",
+ "orderId": "ORD-2025-001"
+ }
+ }
+}
+```
+
+```json Request Created
+{
+ "eventType": "request_created",
+ "timestamp": "2025-09-12T10:00:00Z",
+ "data": {
+ "requestId": "req_1234567890abcdef",
+ "expectedAmount": "1000000000000000000000",
+ "currency": "USDC-matic",
+ "payeeAddress": "0x0987654321098765432109876543210987654321",
+ "payerAddress": "0x1234567890123456789012345678901234567890",
+ "status": "pending",
+ "createdAt": "2025-09-12T10:00:00Z",
+ "dueDate": "2025-10-12T10:00:00Z",
+ "metadata": {
+ "reason": "Professional Services Q3 2025",
+ "invoiceNumber": "INV-001",
+ "customerInfo": {
+ "name": "Acme Corporation",
+ "email": "billing@acme.com"
+ }
+ }
+ }
+}
+```
+
+```json Subscription Renewed
+{
+ "eventType": "subscription_renewed",
+ "timestamp": "2025-09-12T10:30:00Z",
+ "data": {
+ "subscriptionId": "sub_1234567890abcdef",
+ "requestId": "req_abcdef1234567890",
+ "paymentReference": "pay_1234567890abcdef",
+ "transactionHash": "0x742d35cc6cf8a8cbeff61cf82c6b8b3b42a67f1d6c1e8a7b9e2f8d5c3a1b0e9f",
+ "amount": "2999000000000000000000", // $29.99
+ "currency": "USD",
+ "renewalPeriod": "monthly",
+ "nextRenewalDate": "2025-10-12T10:30:00Z",
+ "customerId": "cust_1234567890",
+ "subscriptionPlan": {
+ "name": "Pro Plan",
+ "features": ["feature1", "feature2"],
+ "billingCycle": "monthly"
+ }
+ }
+}
+```
+
+
+## Integration Examples
+
+### E-commerce Order Processing
+
+
+```javascript Express.js Handler
+app.post('/webhooks/payment-confirmed', async (req, res) => {
+ try {
+ // Verify webhook signature
+ if (!verifyWebhookSignature(req)) {
+ return res.status(401).send('Unauthorized');
+ }
+
+ const { eventType, data } = req.body;
+
+ if (eventType === 'payment_confirmed') {
+ const orderId = data.metadata.orderId;
+
+ // Update order status
+ await updateOrder(orderId, {
+ status: 'paid',
+ paymentHash: data.transactionHash,
+ paidAt: data.timestamp,
+ paymentMethod: 'crypto'
+ });
+
+ // Send confirmation email
+ await sendOrderConfirmation(orderId);
+
+ // Trigger fulfillment
+ await triggerOrderFulfillment(orderId);
+
+ console.log(`Order ${orderId} marked as paid`);
+ }
+
+ res.status(200).send('OK');
+
+ } catch (error) {
+ console.error('Webhook error:', error);
+ res.status(500).send('Error processing webhook');
+ }
+});
+```
+
+```javascript SaaS Subscription Handler
+app.post('/webhooks/subscription-events', async (req, res) => {
+ try {
+ const { eventType, data } = req.body;
+
+ switch (eventType) {
+ case 'subscription_renewed':
+ // Extend subscription period
+ await extendSubscription(data.customerId, data.renewalPeriod);
+
+ // Send renewal confirmation
+ await sendRenewalConfirmation(data.customerId);
+ break;
+
+ case 'subscription_failed':
+ // Handle failed payment
+ await handleFailedSubscriptionPayment(data.customerId);
+
+ // Send payment failure notification
+ await sendPaymentFailureNotification(data.customerId);
+ break;
+
+ case 'subscription_cancelled':
+ // Deactivate subscription
+ await deactivateSubscription(data.customerId);
+ break;
+ }
+
+ res.status(200).send('OK');
+
+ } catch (error) {
+ console.error('Subscription webhook error:', error);
+ res.status(500).send('Error processing subscription webhook');
+ }
+});
+```
+
+
+### Database Integration
+
+
+```sql Payment Tracking
+-- Create table for payment tracking
+CREATE TABLE payment_events (
+ id SERIAL PRIMARY KEY,
+ request_id VARCHAR(255) NOT NULL,
+ event_type VARCHAR(50) NOT NULL,
+ transaction_hash VARCHAR(66),
+ block_number INTEGER,
+ amount DECIMAL(36, 18),
+ currency VARCHAR(20),
+ payer_address VARCHAR(42),
+ payee_address VARCHAR(42),
+ metadata JSONB,
+ created_at TIMESTAMP DEFAULT NOW(),
+ processed_at TIMESTAMP,
+ INDEX idx_request_id (request_id),
+ INDEX idx_event_type (event_type),
+ INDEX idx_created_at (created_at)
+);
+```
+
+```javascript Database Handler
+async function savePaymentEvent(eventData) {
+ const {
+ requestId,
+ eventType,
+ transactionHash,
+ blockNumber,
+ amount,
+ currency,
+ payerAddress,
+ payeeAddress,
+ metadata
+ } = eventData;
+
+ // Insert payment event
+ const result = await db.query(`
+ INSERT INTO payment_events (
+ request_id, event_type, transaction_hash, block_number,
+ amount, currency, payer_address, payee_address, metadata
+ ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
+ RETURNING id
+ `, [
+ requestId, eventType, transactionHash, blockNumber,
+ amount, currency, payerAddress, payeeAddress, JSON.stringify(metadata)
+ ]);
+
+ return result.rows[0].id;
+}
+```
+
+
+## Testing Webhooks
+
+### Webhook Testing Tools
+
+
+
+ **Local Development:**
+ - Expose local server to internet
+ - Test webhooks during development
+ - Secure tunnels with authentication
+
+ ```bash
+ # Install ngrok
+ npm install -g ngrok
+
+ # Expose local server
+ ngrok http 3000
+
+ # Use ngrok URL as webhook endpoint
+ # https://abc123.ngrok.io/webhooks/request-network
+ ```
+
+
+
+ **Quick Testing:**
+ - Temporary webhook endpoints
+ - Inspect webhook payloads
+ - No setup required
+
+ **Process:**
+ 1. Go to webhook.site
+ 2. Copy the unique URL
+ 3. Use as webhook endpoint
+ 4. View received webhooks in browser
+
+
+
+### Test Event Simulation
+
+
+**Test Webhooks in Request Portal**
+
+Use the Request Portal to send test webhook events to your endpoint for development and testing.
+
+
+## What's Next?
+
+
+
+ Secure your API and webhook endpoints
+
+
+
+ Learn more about webhook event types and handling
+
+
+
+ Common webhook integration patterns and best practices
+
+
diff --git a/api-setup/getting-started.mdx b/api-setup/getting-started.mdx
new file mode 100644
index 0000000..b080180
--- /dev/null
+++ b/api-setup/getting-started.mdx
@@ -0,0 +1,362 @@
+---
+title: "Getting Started"
+description: "Quick setup guide to get your API keys and start building with Request Network"
+---
+
+## Welcome to Request Network
+
+Get started with Request Network in just a few minutes. This guide will walk you through setting up your account, obtaining API keys, and making your first API call.
+
+## Quick Setup
+
+
+
+ Sign up for a free Request Network account at [portal.request.network](https://portal.request.network)
+
+
+ Generate your API keys for both testnet (development) and mainnet (production)
+
+
+ Select your integration approach based on your use case
+
+
+ Test your setup with a simple API call
+
+
+
+## Account Setup
+
+### Request Portal Registration
+
+
+
+ **For Developers:**
+ - Free account with generous limits
+ - Access to testnet for development
+ - API documentation and tools
+ - Community support
+
+ [Sign Up โ](https://portal.request.network)
+
+
+
+ **For Enterprises:**
+ - Higher rate limits
+ - Priority support
+ - Custom integrations
+ - SLA guarantees
+
+ [Contact Sales โ](https://request.network/contact)
+
+
+
+### API Key Generation
+
+
+
+ **Development Environment:**
+ 1. Log in to Request Portal
+ 2. Navigate to "API Keys" section
+ 3. Click "Generate New Key"
+ 4. Select "Testnet" environment
+ 5. Name your key (e.g., "Development")
+ 6. Copy and securely store the key
+
+
+ **Testnet vs Mainnet**
+
+ Always start development on testnet. Testnet uses test cryptocurrencies with no real value.
+
+
+
+
+ **Production Environment:**
+ 1. Complete account verification
+ 2. Generate new API key
+ 3. Select "Mainnet" environment
+ 4. Configure production settings
+ 5. Set up monitoring and alerts
+
+
+ **Security Best Practices**
+
+ - Store API keys in environment variables
+ - Never commit keys to version control
+ - Use different keys for different environments
+ - Rotate keys regularly
+
+
+
+
+## Choose Your Path
+
+Select the integration approach that best fits your needs:
+
+
+
+ **Best for:** Professional invoicing, B2B payments
+
+ Get started with invoice creation and payment collection in under 5 minutes.
+
+
+
+ **Best for:** Vendor payments, contractor payouts
+
+ Send instant crypto payments to multiple recipients with batch processing.
+
+
+
+ **Best for:** E-commerce, digital goods
+
+ Accept crypto payments in your online store with 80+ wallet support.
+
+
+
+
+
+ **Best for:** Employee payments, bulk processing
+
+ Automate payroll with batch payments and recurring schedules.
+
+
+
+ **Best for:** SaaS billing, recurring revenue
+
+ Set up automated subscription billing with flexible payment cycles.
+
+
+
+## Quick Test
+
+Verify your setup with a simple API call:
+
+
+```bash cURL
+curl -X POST https://api.request.network/v2/requests \
+ -H "Authorization: Bearer YOUR_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "currency": "USD",
+ "expectedAmount": "100",
+ "payeeIdentity": "0x627306090abaB3A6e1400e9345bC60c78a8BEf57",
+ "reason": "Test invoice"
+ }'
+```
+
+```javascript Node.js
+const axios = require('axios');
+
+async function createTestRequest() {
+ try {
+ const response = await axios.post('https://api.request.network/v2/requests', {
+ currency: 'USD',
+ expectedAmount: '100',
+ payeeIdentity: '0x627306090abaB3A6e1400e9345bC60c78a8BEf57',
+ reason: 'Test invoice'
+ }, {
+ headers: {
+ 'Authorization': `Bearer ${process.env.REQUEST_NETWORK_API_KEY}`,
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ console.log('Request created:', response.data.requestId);
+ return response.data;
+
+ } catch (error) {
+ console.error('Error creating request:', error.response?.data || error.message);
+ }
+}
+
+createTestRequest();
+```
+
+```python Python
+import requests
+import os
+
+def create_test_request():
+ url = "https://api.request.network/v2/requests"
+
+ headers = {
+ "Authorization": f"Bearer {os.getenv('REQUEST_NETWORK_API_KEY')}",
+ "Content-Type": "application/json"
+ }
+
+ data = {
+ "currency": "USD",
+ "expectedAmount": "100",
+ "payeeIdentity": "0x627306090abaB3A6e1400e9345bC60c78a8BEf57",
+ "reason": "Test invoice"
+ }
+
+ try:
+ response = requests.post(url, json=data, headers=headers)
+ response.raise_for_status()
+
+ print(f"Request created: {response.json()['requestId']}")
+ return response.json()
+
+ except requests.exceptions.RequestException as e:
+ print(f"Error creating request: {e}")
+
+create_test_request()
+```
+
+
+## Environment Configuration
+
+### Environment Variables
+
+Set up your environment variables for secure API key management:
+
+
+```bash .env
+# Request Network Configuration
+REQUEST_NETWORK_API_KEY=your_api_key_here
+REQUEST_NETWORK_ENVIRONMENT=testnet
+
+# Webhook Configuration (optional)
+REQUEST_WEBHOOK_SECRET=your_webhook_secret_here
+REQUEST_WEBHOOK_URL=https://your-domain.com/webhooks/request-network
+
+# Application Configuration
+PORT=3000
+NODE_ENV=development
+```
+
+```javascript config.js
+module.exports = {
+ requestNetwork: {
+ apiKey: process.env.REQUEST_NETWORK_API_KEY,
+ environment: process.env.REQUEST_NETWORK_ENVIRONMENT || 'testnet',
+ webhookSecret: process.env.REQUEST_WEBHOOK_SECRET,
+ webhookUrl: process.env.REQUEST_WEBHOOK_URL
+ },
+ app: {
+ port: process.env.PORT || 3000,
+ environment: process.env.NODE_ENV || 'development'
+ }
+};
+```
+
+
+## Development Tools
+
+### Request Portal Features
+
+
+
+ **Interactive Testing:**
+ - Test API endpoints directly in browser
+ - Real-time response preview
+ - Code generation for multiple languages
+ - Request/response logging
+
+
+
+ **Webhook Development:**
+ - Test webhook delivery
+ - Inspect webhook payloads
+ - Retry failed webhooks
+ - Webhook logs and analytics
+
+
+
+
+
+ **Real-time Monitoring:**
+ - Live transaction tracking
+ - Payment status updates
+ - Error monitoring and alerts
+ - Performance metrics
+
+
+
+ **Usage Analytics:**
+ - API usage statistics
+ - Payment volume tracking
+ - Success/failure rates
+ - Performance insights
+
+
+
+## Troubleshooting
+
+### Common Issues
+
+
+
+ **401 Unauthorized:**
+ - Verify API key is correct
+ - Check environment (testnet vs mainnet)
+ - Ensure API key has required permissions
+ - Verify Authorization header format
+
+
+
+ **429 Too Many Requests:**
+ - Implement exponential backoff
+ - Check your current rate limits
+ - Consider upgrading to higher limits
+ - Optimize API call frequency
+
+
+
+ **Connection Problems:**
+ - Check network connectivity
+ - Verify API endpoint URLs
+ - Test with different networks
+ - Check firewall settings
+
+
+
+## What's Next?
+
+Now that you're set up, explore the features that matter most to your use case:
+
+
+
+ Detailed API endpoint documentation
+
+
+
+ Learn about payment types and advanced capabilities
+
+
+
+ Best practices and common integration patterns
+
+
diff --git a/development.mdx b/development.mdx
deleted file mode 100644
index ac633ba..0000000
--- a/development.mdx
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: 'Development'
-description: 'Preview changes locally to update your docs'
----
-
-
- **Prerequisites**:
- - Node.js version 19 or higher
- - A docs repository with a `docs.json` file
-
-
-Follow these steps to install and run Mintlify on your operating system.
-
-
-
-
-```bash
-npm i -g mint
-```
-
-
-
-
-Navigate to your docs directory where your `docs.json` file is located, and run the following command:
-
-```bash
-mint dev
-```
-
-A local preview of your documentation will be available at `http://localhost:3000`.
-
-
-
-
-## Custom ports
-
-By default, Mintlify uses port 3000. You can customize the port Mintlify runs on by using the `--port` flag. For example, to run Mintlify on port 3333, use this command:
-
-```bash
-mint dev --port 3333
-```
-
-If you attempt to run Mintlify on a port that's already in use, it will use the next available port:
-
-```md
-Port 3000 is already in use. Trying 3001 instead.
-```
-
-## Mintlify versions
-
-Please note that each CLI release is associated with a specific version of Mintlify. If your local preview does not align with the production version, please update the CLI:
-
-```bash
-npm mint update
-```
-
-## Validating links
-
-The CLI can assist with validating links in your documentation. To identify any broken links, use the following command:
-
-```bash
-mint broken-links
-```
-
-## Deployment
-
-If the deployment is successful, you should see the following:
-
-
-
-
-
-## Code formatting
-
-We suggest using extensions on your IDE to recognize and format MDX. If you're a VSCode user, consider the [MDX VSCode extension](https://marketplace.visualstudio.com/items?itemName=unifiedjs.vscode-mdx) for syntax highlighting, and [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) for code formatting.
-
-## Troubleshooting
-
-
-
-
- This may be due to an outdated version of node. Try the following:
- 1. Remove the currently-installed version of the CLI: `npm remove -g mint`
- 2. Upgrade to Node v19 or higher.
- 3. Reinstall the CLI: `npm i -g mint`
-
-
-
-
- Solution: Go to the root of your device and delete the `~/.mintlify` folder. Then run `mint dev` again.
-
-
-
-Curious about what changed in the latest CLI version? Check out the [CLI changelog](https://www.npmjs.com/package/mintlify?activeTab=versions).
diff --git a/docs.json b/docs.json
index cf106b7..6e2b9d3 100644
--- a/docs.json
+++ b/docs.json
@@ -1,127 +1,210 @@
{
"$schema": "https://mintlify.com/docs.json",
"theme": "mint",
- "name": "Mint Starter Kit",
+ "name": "Request Network Docs",
"colors": {
- "primary": "#16A34A",
- "light": "#07C983",
- "dark": "#15803D"
+ "primary": "#01B089",
+ "light": "#59F9D6",
+ "dark": "#01513B"
+ },
+ "appearance": {
+ "default": "dark"
+ },
+ "background": {
+ "decoration": "gradient",
+ "color": {
+ "light": "#FFFFFF",
+ "dark": "#001912"
+ }
},
"favicon": "/favicon.svg",
+ "fonts": {
+ "heading": {
+ "family": "Montserrat"
+ },
+ "body": {
+ "family": "Montserrat",
+ "weight": 500
+ }
+ },
+ "thumbnails": {
+ "appearance": "dark"
+ },
+ "banner": {
+ "content": "๐ New: Check out our revamped documentation!",
+ "dismissible": true
+ },
"navigation": {
"tabs": [
{
- "tab": "Guides",
+ "tab": "Welcome",
+ "pages": ["index"]
+ },
+ {
+ "tab": "Use Cases",
"groups": [
{
- "group": "Getting started",
+ "group": "๐ Primary Use Cases",
"pages": [
- "index",
- "quickstart",
- "development"
+ "use-cases/invoicing",
+ "use-cases/payouts",
+ "use-cases/payroll",
+ "use-cases/checkout",
+ "use-cases/subscriptions"
]
- },
+ }
+ ]
+ },
+ {
+ "tab": "API",
+ "groups": [
{
- "group": "Customization",
+ "group": "๐ API Setup",
"pages": [
- "essentials/settings",
- "essentials/navigation"
+ "api-setup/getting-started",
+ "request-network-api/api-portal-manage-api-keys-and-webhooks"
]
},
{
- "group": "Writing content",
+ "group": "โ๏ธ API Features",
"pages": [
- "essentials/markdown",
- "essentials/code",
- "essentials/images",
- "essentials/reusable-snippets"
+ "api-features/payment-types",
+ "api-features/advanced-features",
+ "api-features/integration-patterns"
]
},
{
- "group": "AI tools",
+ "group": "๐ API Reference",
"pages": [
- "ai-tools/cursor",
- "ai-tools/claude-code",
- "ai-tools/windsurf"
+ "api-reference/authentication",
+ "api-reference/webhooks",
+ {
+ "group": "Endpoints",
+ "openapi": "https://api.stage.request.network/open-api/openapi.json",
+ "pages": [
+ "request-network-api/create-and-pay-requests"
+ ]
+ }
]
}
]
},
{
- "tab": "API reference",
+ "tab": "Resources",
"groups": [
{
- "group": "API documentation",
+ "group": "๐ Developer Resources",
"pages": [
- "api-reference/introduction"
+ "resources/supported-chains-and-currencies",
+ "resources/smart-contracts",
+ "resources/community"
]
},
{
- "group": "Endpoint examples",
+ "group": "๐ Documentation",
+ "pages": [
+ "faq",
+ "glossary"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "SDK (Legacy)",
+ "groups": [
+ {
+ "group": "๐ง SDK Documentation",
+ "pages": [
+ "request-network-api/migrate-to-v2",
+ "sdk-legacy/migration-guide"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Release Notes",
+ "groups": [
+ {
+ "group": "๐ Release Notes",
"pages": [
- "api-reference/endpoint/get",
- "api-reference/endpoint/create",
- "api-reference/endpoint/delete",
- "api-reference/endpoint/webhook"
+ "release-notes/index",
+ "release-notes/request-api",
+ "release-notes/easy-invoice"
]
}
]
}
- ],
- "global": {
- "anchors": [
- {
- "anchor": "Documentation",
- "href": "https://mintlify.com/docs",
- "icon": "book-open-cover"
- },
- {
- "anchor": "Community",
- "href": "https://mintlify.com/community",
- "icon": "slack"
- },
- {
- "anchor": "Blog",
- "href": "https://mintlify.com/blog",
- "icon": "newspaper"
- }
- ]
- }
+ ]
},
"logo": {
"light": "/logo/light.svg",
- "dark": "/logo/dark.svg"
+ "dark": "/logo/dark.svg",
+ "href": "https://request.network"
},
"navbar": {
"links": [
{
"label": "Support",
- "href": "mailto:hi@mintlify.com"
+ "href": "https://github.com/orgs/RequestNetwork/discussions"
}
],
- "primary": {
+ "primary":
+ {
"type": "button",
- "label": "Dashboard",
- "href": "https://dashboard.mintlify.com"
+ "label": "Get your API Key",
+ "href": "https://portal.request.network"
}
},
"contextual": {
"options": [
- "copy",
- "view",
- "chatgpt",
- "claude",
- "perplexity",
- "mcp",
- "cursor",
- "vscode"
- ]
+ "copy",
+ "view",
+ "chatgpt",
+ "claude",
+ "perplexity",
+ "mcp",
+ "cursor",
+ "vscode"
+ ]
},
"footer": {
"socials": {
- "x": "https://x.com/mintlify",
- "github": "https://github.com/mintlify",
- "linkedin": "https://linkedin.com/company/mintlify"
- }
+ "x": "https://x.com/RequestNetwork",
+ "discord": "https://request.network/discord",
+ "github": "https://github.com/RequestNetwork",
+ "linkedin": "https://www.linkedin.com/company/request-network",
+ "bluesky": "https://bsky.app/profile/requestnetwork.bsky.social"
+ },
+ "links": [
+ {
+ "items": [
+ {
+ "label": "Website",
+ "href": "https://request.network"
+ },
+ {
+ "label": "Community",
+ "href": "https://discord.com/invite/FsVAR3ny3f"
+ },
+ {
+ "label": "Portal",
+ "href": "https://portal.request.network"
+ },
+ {
+ "label": "Scan",
+ "href": "https://scan.request.network"
+ },
+ {
+ "label": "Status",
+ "href": "https://status.request.network"
+ },
+ {
+ "label": "Blog",
+ "href": "https://request.network/blog"
+ }
+ ]
+
+ }
+ ]
}
}
diff --git a/essentials/code.mdx b/essentials/code.mdx
deleted file mode 100644
index ae2abbf..0000000
--- a/essentials/code.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: 'Code blocks'
-description: 'Display inline code and code blocks'
-icon: 'code'
----
-
-## Inline code
-
-To denote a `word` or `phrase` as code, enclose it in backticks (`).
-
-```
-To denote a `word` or `phrase` as code, enclose it in backticks (`).
-```
-
-## Code blocks
-
-Use [fenced code blocks](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) by enclosing code in three backticks and follow the leading ticks with the programming language of your snippet to get syntax highlighting. Optionally, you can also write the name of your code after the programming language.
-
-```java HelloWorld.java
-class HelloWorld {
- public static void main(String[] args) {
- System.out.println("Hello, World!");
- }
-}
-```
-
-````md
-```java HelloWorld.java
-class HelloWorld {
- public static void main(String[] args) {
- System.out.println("Hello, World!");
- }
-}
-```
-````
diff --git a/essentials/images.mdx b/essentials/images.mdx
deleted file mode 100644
index 1144eb2..0000000
--- a/essentials/images.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: 'Images and embeds'
-description: 'Add image, video, and other HTML elements'
-icon: 'image'
----
-
-
-
-## Image
-
-### Using Markdown
-
-The [markdown syntax](https://www.markdownguide.org/basic-syntax/#images) lets you add images using the following code
-
-```md
-
-```
-
-Note that the image file size must be less than 5MB. Otherwise, we recommend hosting on a service like [Cloudinary](https://cloudinary.com/) or [S3](https://aws.amazon.com/s3/). You can then use that URL and embed.
-
-### Using embeds
-
-To get more customizability with images, you can also use [embeds](/writing-content/embed) to add images
-
-```html
-
-```
-
-## Embeds and HTML elements
-
-
-
-
-
-
-
-Mintlify supports [HTML tags in Markdown](https://www.markdownguide.org/basic-syntax/#html). This is helpful if you prefer HTML tags to Markdown syntax, and lets you create documentation with infinite flexibility.
-
-
-
-### iFrames
-
-Loads another HTML page within the document. Most commonly used for embedding videos.
-
-```html
-
-```
diff --git a/essentials/markdown.mdx b/essentials/markdown.mdx
deleted file mode 100644
index a45c1d5..0000000
--- a/essentials/markdown.mdx
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: 'Markdown syntax'
-description: 'Text, title, and styling in standard markdown'
-icon: 'text-size'
----
-
-## Titles
-
-Best used for section headers.
-
-```md
-## Titles
-```
-
-### Subtitles
-
-Best used for subsection headers.
-
-```md
-### Subtitles
-```
-
-
-
-Each **title** and **subtitle** creates an anchor and also shows up on the table of contents on the right.
-
-
-
-## Text formatting
-
-We support most markdown formatting. Simply add `**`, `_`, or `~` around text to format it.
-
-| Style | How to write it | Result |
-| ------------- | ----------------- | --------------- |
-| Bold | `**bold**` | **bold** |
-| Italic | `_italic_` | _italic_ |
-| Strikethrough | `~strikethrough~` | ~strikethrough~ |
-
-You can combine these. For example, write `**_bold and italic_**` to get **_bold and italic_** text.
-
-You need to use HTML to write superscript and subscript text. That is, add `` or `` around your text.
-
-| Text Size | How to write it | Result |
-| ----------- | ------------------------ | ---------------------- |
-| Superscript | `superscript` | superscript |
-| Subscript | `subscript` | subscript |
-
-## Linking to pages
-
-You can add a link by wrapping text in `[]()`. You would write `[link to google](https://google.com)` to [link to google](https://google.com).
-
-Links to pages in your docs need to be root-relative. Basically, you should include the entire folder path. For example, `[link to text](/writing-content/text)` links to the page "Text" in our components section.
-
-Relative links like `[link to text](../text)` will open slower because we cannot optimize them as easily.
-
-## Blockquotes
-
-### Singleline
-
-To create a blockquote, add a `>` in front of a paragraph.
-
-> Dorothy followed her through many of the beautiful rooms in her castle.
-
-```md
-> Dorothy followed her through many of the beautiful rooms in her castle.
-```
-
-### Multiline
-
-> Dorothy followed her through many of the beautiful rooms in her castle.
->
-> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
-
-```md
-> Dorothy followed her through many of the beautiful rooms in her castle.
->
-> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
-```
-
-### LaTeX
-
-Mintlify supports [LaTeX](https://www.latex-project.org) through the Latex component.
-
-8 x (vk x H1 - H2) = (0,1)
-
-```md
-8 x (vk x H1 - H2) = (0,1)
-```
diff --git a/essentials/navigation.mdx b/essentials/navigation.mdx
deleted file mode 100644
index 60adeff..0000000
--- a/essentials/navigation.mdx
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: 'Navigation'
-description: 'The navigation field in docs.json defines the pages that go in the navigation menu'
-icon: 'map'
----
-
-The navigation menu is the list of links on every website.
-
-You will likely update `docs.json` every time you add a new page. Pages do not show up automatically.
-
-## Navigation syntax
-
-Our navigation syntax is recursive which means you can make nested navigation groups. You don't need to include `.mdx` in page names.
-
-
-
-```json Regular Navigation
-"navigation": {
- "tabs": [
- {
- "tab": "Docs",
- "groups": [
- {
- "group": "Getting Started",
- "pages": ["quickstart"]
- }
- ]
- }
- ]
-}
-```
-
-```json Nested Navigation
-"navigation": {
- "tabs": [
- {
- "tab": "Docs",
- "groups": [
- {
- "group": "Getting Started",
- "pages": [
- "quickstart",
- {
- "group": "Nested Reference Pages",
- "pages": ["nested-reference-page"]
- }
- ]
- }
- ]
- }
- ]
-}
-```
-
-
-
-## Folders
-
-Simply put your MDX files in folders and update the paths in `docs.json`.
-
-For example, to have a page at `https://yoursite.com/your-folder/your-page` you would make a folder called `your-folder` containing an MDX file called `your-page.mdx`.
-
-
-
-You cannot use `api` for the name of a folder unless you nest it inside another folder. Mintlify uses Next.js which reserves the top-level `api` folder for internal server calls. A folder name such as `api-reference` would be accepted.
-
-
-
-```json Navigation With Folder
-"navigation": {
- "tabs": [
- {
- "tab": "Docs",
- "groups": [
- {
- "group": "Group Name",
- "pages": ["your-folder/your-page"]
- }
- ]
- }
- ]
-}
-```
-
-## Hidden pages
-
-MDX files not included in `docs.json` will not show up in the sidebar but are accessible through the search bar and by linking directly to them.
diff --git a/essentials/reusable-snippets.mdx b/essentials/reusable-snippets.mdx
deleted file mode 100644
index 376e27b..0000000
--- a/essentials/reusable-snippets.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: "Reusable snippets"
-description: "Reusable, custom snippets to keep content in sync"
-icon: "recycle"
----
-
-import SnippetIntro from '/snippets/snippet-intro.mdx';
-
-
-
-## Creating a custom snippet
-
-**Pre-condition**: You must create your snippet file in the `snippets` directory.
-
-
- Any page in the `snippets` directory will be treated as a snippet and will not
- be rendered into a standalone page. If you want to create a standalone page
- from the snippet, import the snippet into another file and call it as a
- component.
-
-
-### Default export
-
-1. Add content to your snippet file that you want to re-use across multiple
- locations. Optionally, you can add variables that can be filled in via props
- when you import the snippet.
-
-```mdx snippets/my-snippet.mdx
-Hello world! This is my content I want to reuse across pages. My keyword of the
-day is {word}.
-```
-
-
- The content that you want to reuse must be inside the `snippets` directory in
- order for the import to work.
-
-
-2. Import the snippet into your destination file.
-
-```mdx destination-file.mdx
----
-title: My title
-description: My Description
----
-
-import MySnippet from '/snippets/path/to/my-snippet.mdx';
-
-## Header
-
-Lorem impsum dolor sit amet.
-
-
-```
-
-### Reusable variables
-
-1. Export a variable from your snippet file:
-
-```mdx snippets/path/to/custom-variables.mdx
-export const myName = 'my name';
-
-export const myObject = { fruit: 'strawberries' };
-```
-
-2. Import the snippet from your destination file and use the variable:
-
-```mdx destination-file.mdx
----
-title: My title
-description: My Description
----
-
-import { myName, myObject } from '/snippets/path/to/custom-variables.mdx';
-
-Hello, my name is {myName} and I like {myObject.fruit}.
-```
-
-### Reusable components
-
-1. Inside your snippet file, create a component that takes in props by exporting
- your component in the form of an arrow function.
-
-```mdx snippets/custom-component.mdx
-export const MyComponent = ({ title }) => (
-
-
{title}
-
... snippet content ...
-
-);
-```
-
-
- MDX does not compile inside the body of an arrow function. Stick to HTML
- syntax when you can or use a default export if you need to use MDX.
-
-
-2. Import the snippet into your destination file and pass in the props
-
-```mdx destination-file.mdx
----
-title: My title
-description: My Description
----
-
-import { MyComponent } from '/snippets/custom-component.mdx';
-
-Lorem ipsum dolor sit amet.
-
-
-```
diff --git a/essentials/settings.mdx b/essentials/settings.mdx
deleted file mode 100644
index 884de13..0000000
--- a/essentials/settings.mdx
+++ /dev/null
@@ -1,318 +0,0 @@
----
-title: 'Global Settings'
-description: 'Mintlify gives you complete control over the look and feel of your documentation using the docs.json file'
-icon: 'gear'
----
-
-Every Mintlify site needs a `docs.json` file with the core configuration settings. Learn more about the [properties](#properties) below.
-
-## Properties
-
-
-Name of your project. Used for the global title.
-
-Example: `mintlify`
-
-
-
-
- An array of groups with all the pages within that group
-
-
- The name of the group.
-
- Example: `Settings`
-
-
-
- The relative paths to the markdown files that will serve as pages.
-
- Example: `["customization", "page"]`
-
-
-
-
-
-
-
- Path to logo image or object with path to "light" and "dark" mode logo images
-
-
- Path to the logo in light mode
-
-
- Path to the logo in dark mode
-
-
- Where clicking on the logo links you to
-
-
-
-
-
- Path to the favicon image
-
-
-
- Hex color codes for your global theme
-
-
- The primary color. Used for most often for highlighted content, section
- headers, accents, in light mode
-
-
- The primary color for dark mode. Used for most often for highlighted
- content, section headers, accents, in dark mode
-
-
- The primary color for important buttons
-
-
- The color of the background in both light and dark mode
-
-
- The hex color code of the background in light mode
-
-
- The hex color code of the background in dark mode
-
-
-
-
-
-
-
- Array of `name`s and `url`s of links you want to include in the topbar
-
-
- The name of the button.
-
- Example: `Contact us`
-
-
- The url once you click on the button. Example: `https://mintlify.com/docs`
-
-
-
-
-
-
-
-
- Link shows a button. GitHub shows the repo information at the url provided including the number of GitHub stars.
-
-
- If `link`: What the button links to.
-
- If `github`: Link to the repository to load GitHub information from.
-
-
- Text inside the button. Only required if `type` is a `link`.
-
-
-
-
-
-
- Array of version names. Only use this if you want to show different versions
- of docs with a dropdown in the navigation bar.
-
-
-
- An array of the anchors, includes the `icon`, `color`, and `url`.
-
-
- The [Font Awesome](https://fontawesome.com/search?q=heart) icon used to feature the anchor.
-
- Example: `comments`
-
-
- The name of the anchor label.
-
- Example: `Community`
-
-
- The start of the URL that marks what pages go in the anchor. Generally, this is the name of the folder you put your pages in.
-
-
- The hex color of the anchor icon background. Can also be a gradient if you pass an object with the properties `from` and `to` that are each a hex color.
-
-
- Used if you want to hide an anchor until the correct docs version is selected.
-
-
- Pass `true` if you want to hide the anchor until you directly link someone to docs inside it.
-
-
- One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin"
-
-
-
-
-
-
- Override the default configurations for the top-most anchor.
-
-
- The name of the top-most anchor
-
-
- Font Awesome icon.
-
-
- One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin"
-
-
-
-
-
- An array of navigational tabs.
-
-
- The name of the tab label.
-
-
- The start of the URL that marks what pages go in the tab. Generally, this
- is the name of the folder you put your pages in.
-
-
-
-
-
- Configuration for API settings. Learn more about API pages at [API Components](/api-playground/demo).
-
-
- The base url for all API endpoints. If `baseUrl` is an array, it will enable for multiple base url
- options that the user can toggle.
-
-
-
-
-
- The authentication strategy used for all API endpoints.
-
-
- The name of the authentication parameter used in the API playground.
-
- If method is `basic`, the format should be `[usernameName]:[passwordName]`
-
-
- The default value that's designed to be a prefix for the authentication input field.
-
- E.g. If an `inputPrefix` of `AuthKey` would inherit the default input result of the authentication field as `AuthKey`.
-
-
-
-
-
- Configurations for the API playground
-
-
-
- Whether the playground is showing, hidden, or only displaying the endpoint with no added user interactivity `simple`
-
- Learn more at the [playground guides](/api-playground/demo)
-
-
-
-
-
- Enabling this flag ensures that key ordering in OpenAPI pages matches the key ordering defined in the OpenAPI file.
-
- This behavior will soon be enabled by default, at which point this field will be deprecated.
-
-
-
-
-
-
- A string or an array of strings of URL(s) or relative path(s) pointing to your
- OpenAPI file.
-
- Examples:
-
- ```json Absolute
- "openapi": "https://example.com/openapi.json"
- ```
- ```json Relative
- "openapi": "/openapi.json"
- ```
- ```json Multiple
- "openapi": ["https://example.com/openapi1.json", "/openapi2.json", "/openapi3.json"]
- ```
-
-
-
-
-
- An object of social media accounts where the key:property pair represents the social media platform and the account url.
-
- Example:
- ```json
- {
- "x": "https://x.com/mintlify",
- "website": "https://mintlify.com"
- }
- ```
-
-
- One of the following values `website`, `facebook`, `x`, `discord`, `slack`, `github`, `linkedin`, `instagram`, `hacker-news`
-
- Example: `x`
-
-
- The URL to the social platform.
-
- Example: `https://x.com/mintlify`
-
-
-
-
-
- Configurations to enable feedback buttons
-
-
-
- Enables a button to allow users to suggest edits via pull requests
-
-
- Enables a button to allow users to raise an issue about the documentation
-
-
-
-
-
- Customize the dark mode toggle.
-
-
- Set if you always want to show light or dark mode for new users. When not
- set, we default to the same mode as the user's operating system.
-
-
- Set to true to hide the dark/light mode toggle. You can combine `isHidden` with `default` to force your docs to only use light or dark mode. For example:
-
-
- ```json Only Dark Mode
- "modeToggle": {
- "default": "dark",
- "isHidden": true
- }
- ```
-
- ```json Only Light Mode
- "modeToggle": {
- "default": "light",
- "isHidden": true
- }
- ```
-
-
-
-
-
-
-
-
- A background image to be displayed behind every page. See example with
- [Infisical](https://infisical.com/docs) and [FRPC](https://frpc.io).
-
diff --git a/faq.mdx b/faq.mdx
new file mode 100644
index 0000000..dc42499
--- /dev/null
+++ b/faq.mdx
@@ -0,0 +1,109 @@
+---
+title: "FAQ"
+description: "Frequently Asked Questions and Common Misconceptions"
+
+---
+
+If your question is not answered below, please consider posting it to the [Request Network Discussions](https://github.com/orgs/RequestNetwork/discussions) page on Github.
+
+
+
+
+ No. Request Network is not a blockchain, smart contract platform, or scaling solution. Rather, it's a protocol for storing payment requests, facilitating on-chain payments, and reconciling those payments with the requests. It stores payment requests in [IPFS](https://www.ipfs.com/) and CID hashes on [Gnosis Chain](https://www.gnosis.io/). It uses [The Graph](https://thegraph.com/) for on-chain event indexing. It processes payments across a variety of [supported payment chains](https://docs.request.network/get-started/supported-chains).
+
+
+
+ Request Network is an open-source protocol. Request Finance is a product built on top of Request Network. Request Finance has spun off from Request Network, and they are now two separate teams.
+
+
+
+ No. Requests are created on Gnosis Chain (or Sepolia for testing), even if the payment will happen on a different chain. Payment(s) can occur on any of our [supported payment chains](https://docs.request.network/get-started/supported-chains#payments).
+
+ To help builders get started quickly, the Request Network Foundation operates [Request Node Gateways](https://docs.request.network/get-started/request-node-gateways) that are free for anyone to use. These gateways offer endpoints for creating and retrieving requests.
+
+ Requests created on Gnosis Chain are "real" and will exist forever. Requests created on Sepolia are "test" requests and will exist only as long as Sepolia continues to operate.
+
+
+
+ It can be, but not necessarily. The [Signer Identity](https://docs.request.network/glossary#signer-identity) that signs to create a request is defined by the `signer` parameter. This is separate from the [Payment Recipient](https://docs.request.network/glossary#payment-recipient) which is defined by the `paymentNetwork.parameters.paymentAddress` parameter. They can be the same or different.
+
+ This design allows for a single payee identity to have potentially multiple payment recipient addresses.
+
+ See [Parties of a Request](https://docs.request.network/glossary#parties-of-a-request) for details.
+
+
+
+ No. Request Network is a hybrid on/off-chain protocol storing the majority of request contents in IPFS. Only the content-addressable ID (CID) is stored on-chain, on Gnosis Chain.
+
+
+
+ Yes. Payments are linked to requests via a [Payment Reference](https://docs.request.network/advanced/request-network-sdk/sdk-guides/request-client/payment-reference) derived from the request contents. Therefore, it is possible to calculate the `paymentReference` and execute a payment *before* creating the corresponding request.
+
+
+
+ Yes and No.
+
+ Requests can be *denominated* in fiat currencies like USD, EUR, etc. ([ISO 4217 currencies](https://en.wikipedia.org/wiki/ISO_4217)) but our payment smart contracts only support payments in cryptocurrencies. We call these [Conversion Payment](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/conversion-request)s, in which the requested fiat amount is converted to the appropriate cryptocurrency amount using on-chain price feeds at the moment of payment.
+
+ It is possible to implement fiat payments using Declarative Requests, where the payer declares that the payment was sent and the payee declares that the payment was received.
+
+
+
+ Not currently, but we're working on it.
+
+
+
+ Yes. See [Single Request Forwarder](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/single-request-forwarder)
+
+
+
+ No. A Request Node cannot change a request's contents before persisting it to IPFS and on-chain because doing so would invalidate the signature. This is true for private, encrypted requests as well. The Request Node cannot forge the end-user's signature.
+
+
+
+ No. Today, a Request Node is required to interact with the Request Network IPFS Network. That said, it is possible to make the end-user pay the protocol fee when creating a request instead of the Request Node. To do this, inject an `HttpMetaMaskDataAccess` into the frontend `RequestNetwork` instance.
+
+ ```javascript
+ const requestNetwork = new RequestNetworkBase({
+ dataAccess: new HttpMetaMaskDataAccess({
+ ethereumProviderUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',
+ }),
+ ...
+ }
+ ```
+
+
+
+ Yes. It is possible to request access to a user's Request Finance invoices using the [`add-stakeholder` web component](https://docs.request.network/learn-request-network/components/add-stakeholder) which is just a thin wrapper around the [Request Finance Add Stakeholders API](https://docs.request.finance/faq#i-am-integrating-the-request-network.-can-i-get-access-to-users-data-on-request-finance). They display a dialog that prompts the end-user to grant access to 1 invoice at a time.
+
+ Details:
+
+ - Request Finance invoices are encrypted.
+ - Request Network Foundation cannot grant access to encrypted requests in Request Finance.
+
+
+
+ No. Request Network does not currently support cross-chain payments. All of the supported payment types involve the payer sending funds and the payee receiving funds on the same chain.
+
+
+
+ Yes. See:
+
+ - [Private Requests using Encryption](https://docs.request.network/advanced/protocol-overview/private-requests-using-encryption)
+ - [Encrypt with a wallet signature using Lit Protocol](https://docs.request.network/advanced/request-network-sdk/sdk-guides/encryption-and-decryption/handle-encryption-with-a-web3-wallet)
+
+
+
+ Yes. See [Hinkal Private Payments](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/hinkal-private-payments)
+
+
+
+ No. It is not currently possible to create a request via a smart contract call. However, [RequestNetwork/public-issues#15](https://github.com/RequestNetwork/public-issues/issues/15) is in our roadmap to make this possible.
+
+ The recommended way to create a request is using the Request Network API.
+
+
+
+ Yes. See [Single Request Forwarder](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/single-request-forwarder)
+
+
\ No newline at end of file
diff --git a/favicon.svg b/favicon.svg
index b785c73..d615d18 100644
--- a/favicon.svg
+++ b/favicon.svg
@@ -1,19 +1 @@
-
+
\ No newline at end of file
diff --git a/general/lifecycle-of-a-request.mdx b/general/lifecycle-of-a-request.mdx
new file mode 100644
index 0000000..19c02da
--- /dev/null
+++ b/general/lifecycle-of-a-request.mdx
@@ -0,0 +1,43 @@
+---
+title: "Lifecycle of a Request"
+description: "The typical lifecycle of a request is as follows:"
+---
+
+
+
+
+
+## Create a request
+
+- The payer or payee signs the request which contains the payee, payer, currency, amount, payment details, and arbitrary content data.
+- The request can be optionally encrypted such that only the payee, payer, and approved 3rd parties can view the request contents.
+- The request is persisted in IPFS.
+- The IPFS Content-addressable ID (CID) is stored in a smart contract on Gnosis chain
+
+Requests are *created* by storing their CIDs on Gnosis, but this doesn't mean *payment* must occur on Gnosis. *Payment* can occur on any of the supported chains including 20+ EVM-compatible chains or NEAR.
+
+
+## Update a request
+
+- The payee can optionally cancel the request or increase/decrease the expected amount.
+- The payer can optionally accept the request, indicating that they intend to pay it.
+- Both payee and payer can add 3rd party stakeholders if the request is encrypted.
+
+## Pay a request
+
+- The payer derives a paymentReference from the request contents.
+- The payer calls a function on the payment network smart contract, passing in the token address, to address, amount, and paymentReference.
+- An event is emitted containing the token address, to address, amount, and paymentReference.
+
+Most requests are "reference-based" meaning that a paymentReference derived from the request contents is logged on-chain via a smart contract that emits an event. Nothing gets written back to IPFS when paying a "reference-based" request.
+
+The exception is when paying a "declarative" request, in which case, data *is* written back to IPFS. This includes when the payer declares that the payment was sent and the payee declares that the payment was received.
+
+## Retrieve a request / Detect a payment
+
+- The event is indexed by the payments subgraph
+- An app can retrieve the request contents from IPFS and calculate the balance based on events from the payments subgraph.
+
+The request balance is calculated by adding up all the on-chain payment events with the same paymentReference. Partial payments are possible.
+
+All of these steps are facilitated by the Request Network JavaScript SDK such that the developer needs only make a few function calls. See the [Quickstart](https://docs.request.network/advanced/request-network-sdk/get-started/quickstart-browser) to learn more.
\ No newline at end of file
diff --git a/general/request-network-token-list.mdx b/general/request-network-token-list.mdx
new file mode 100644
index 0000000..7268aa1
--- /dev/null
+++ b/general/request-network-token-list.mdx
@@ -0,0 +1,59 @@
+---
+title: "Request Network Token List"
+description: "The [Request Network Token List](https://requestnetwork.github.io/request-token-list/latest.json) is a curated list of tokens supported by Request Network products. The token list follows a standardized format and includes essential information about each token, such as address, symbol, name, decimals, and chainId."
+
+---
+
+## Usage
+
+The token list is available at: [https://requestnetwork.github.io/request-token-list/latest.json](https://requestnetwork.github.io/request-token-list/latest.json)
+
+You can fetch the token list directly in your application:
+
+```bash
+const tokenList = await fetch(
+ "https://requestnetwork.github.io/request-token-list/latest.json"
+).then((res) => res.json());
+```
+
+## Token List Structure
+
+Each token in the list contains the following information:
+
+```bash
+{
+ "id": "TKN-mainnet"
+ "name": "Token Name",
+ "address": "0x...",
+ "symbol": "TKN",
+ "decimals": 18,
+ "chainId": 1,
+ "logoURI": "https://..."
+}
+```
+
+## Adding a New Token
+
+We welcome community contributions! To add a new token to the list:
+
+
+
+Fork the [request-token-list](https://github.com/RequestNetwork/request-token-list) repository on Github
+
+
+
+Add your token information to `tokens/token-list.json`
+
+
+
+Make sure your token meets our requirements (see [CONTRIBUTING.md](https://github.com/RequestNetwork/request-token-list/blob/main/CONTRIBUTING.md))
+
+
+
+Run tests locally: `npm test`
+
+
+
+Create a Pull Request
+
+
diff --git a/general/request-scan.mdx b/general/request-scan.mdx
new file mode 100644
index 0000000..7276dc5
--- /dev/null
+++ b/general/request-scan.mdx
@@ -0,0 +1,57 @@
+---
+title: "Request Scan"
+description: "An explorer app for viewing requests, payments, and addresses in Request Network."
+---
+
+
+ 
+
+
+
+
+
+
+
+Request Scan is an explorer for viewing requests and payments in Request Network. It enables users to explore and scrutinize requests, payments, and addresses within the Request Network ecosystem.
+
+## Intended Audience
+
+Request Scan caters to a broad audience:
+
+- **Accountants:** Audit and verify financial data on the request network.
+- **Developers:** Easily access Request Network data for troubleshooting your applications.
+- **Analysts:** Gain deep insights into network activity and trends.
+- **Researchers:** Conduct in-depth studies on blockchain data.
+- **Enthusiasts:** Stay informed about the latest happenings on the Request Network.
+
+## Usage
+
+### **User Interface**
+
+- **Search Bar:** Located at the top, allows you to search for specific requests or addresses.
+- **Dashboard:** Provides an overview of network statistics and recent activity.
+- **Requests:** View a list of recent requests with details like payee, payer, amount, and timestamp.
+- **Payments:** View a list of recent payments with details like blockchain transactions, amounts, fees, and timestamps.
+- **Address:** View information about individual addresses, including their requests and payments.
+- **Request:** View information about individual requests, including their details and table with actions and payments.
+
+### **Searching for Data**
+
+- **Request:** Enter a request ID in the search bar to view its details.
+- **Address:** Enter an address to see its requests and payment history.
+
+### Demo Video
+
+
+
+
diff --git a/glossary.mdx b/glossary.mdx
new file mode 100644
index 0000000..c6e9c88
--- /dev/null
+++ b/glossary.mdx
@@ -0,0 +1,152 @@
+---
+title: "Glossary"
+---
+## Parties of a Request
+
+### Payee Identity
+
+The Payee Identity is the EVM address that uniquely identifies the payee. It can be but is not necessarily the address that will receive the payment. It is authorized to make certain updates to the request after it is created. It is one of the owners of the request data. The Payee Identity is defined by the `payee` field when creating a request.
+
+### Payer Identity
+
+The Payer Identity is the EVM address that uniquely identifies the payer. It can be but is not necessarily the address that will send the payment. It is authorized to make certain updates to the request after it is created. It is one of the owners of the request data. The Payer Identity is defined by the `payer` field when creating a request.
+
+### Signer Identity
+
+The Signer Identity is the EVM address that provides the signature to create a request. It must be either the Payee Identity or Payer Identity.
+
+### Payment Recipient
+
+The EVM address that receives the payment. It is defined by the `paymentNetwork.parameters.paymentAddress`field when creating a request.
+
+### Payment Sender
+
+The EVM address that sends the payment. Anyone can pay a given request. The payment sender address is NOT stored in the request contents.
+
+### Additional Stakeholder
+
+An EVM address that has been granted view access to an encrypted request.
+
+### Declarative Delegate
+
+An EVM address that has been granted authorization to declare payments sent and payments received on behalf of either the Payee Identity or Payer Identity of a given request.
+
+## Request Protocol
+
+### Action
+
+An action is signed data added by a request's stakeholder into the Request Protocol that creates or updates the state of a request. A request can be represented by a list of actions. For example, the creation of a request is an action.
+
+### Balance
+
+When using a payment network, the balance is the current amount paid for a request. The balance is determined by the payment detection method of the payment network used.
+
+A request with no payment network provided doesn't have a balance.
+
+### Confirmed/Pending action
+
+Request relies on other blockchain technologies to ensure data immutability. Most blockchains don't offer transaction instant finality. This means that when performing an action on the request, this action can't directly be confirmed as effective.
+
+As long as the action hasn't persisted and is not confirmed, the action is marked as "pending". The "pending" state helps have a fast response and a good user experience. Until the request is Confirmed, it should not be relied upon.
+
+### Signature Provider
+
+A signature provider is an abstraction of identity management and action signatures. Depending on use cases, it allows you to give your user complete control or handle some parts for them.
+
+### Decryption Provider
+
+A decryption provider is an abstraction of the mechanism that handles the decryption of a request. Depending on use cases, it allows you to give your user complete control or handle some parts for them.
+
+It is not used for clear requests.
+
+### Extension
+
+An extension is a set of actions that extends the feature of a request. A request without extension is a fundamental request for payment with a payee, a currency, and a requested amount. The extension allows for more advanced features.
+
+### Identity
+
+The identity defines a stakeholder of a request that allows signing or encrypting the request actions. The identity is the public data that identifies the stakeholder.
+
+### Request ID
+
+The request ID is the number that uniquely identifies a request. This number is computed from the hash of the request creation action.
+
+### Request Data (aka. Request Contents)
+
+The request data is the current state of a request, the data of the request after having applied all the confirmed actions on it.
+
+### Stakeholder
+
+A request stakeholder is a party involved with the request. Stakeholders are generally the payer and the payee of the request or any other third-party allowed to perform actions on it. For encrypted requests, stakeholders are any party interested in reading the request content.
+
+### Topic
+
+A topic is a string that is used to index a request. This topic is used for request retrieval. Several requests can share the same topic.
+
+Every request has its request id and payee identity as topics (and the payer identity if it is defined). Any custom topic can be appended to a request.
+
+## Payments
+
+### Payment Detection
+
+Payment detection is a method defined by the payment network to determine the current balance of a request.
+
+### Payment Network (aka Payment Extension)
+
+A payment network is a predefined set of rules to agree on the balance of a request. The payment network is defined during the creation of the request.
+
+A payment network is generally related to one currency, but it's not always the case (the Declarative payment network is currency agnostic).
+
+### Payment Reference
+
+In the Reference-based Payment Networks, Payments are linked to Requests via a `paymentReference` which is derived from the `requestId` and payment recipient address. For details see [Payment Reference](https://docs.request.network/advanced/request-network-sdk/sdk-guides/request-client/payment-reference)
+
+### Conversion Payment
+
+A "conversion" request is denominated in one currency but paid in another currency. This is facilitated by on-chain price feeds provided by oracles. The typical use case is to denominate a request in fiat like USD and pay the request in stablecoins like USDC or DAI. For details see [Conversion Payment](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/conversion-request)
+
+### Swap-to-pay Payment
+
+A "swap-to-pay" payment is where the payment sender sends one currency but the payment recipient receives a different currency. For details see [Swap-to-Pay Payment](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/swap-to-pay-request)
+
+### Swap-to-Conversion Payment
+
+A "swap-to-conversion" payment is where the request is denominated in currency A, the payer sends currency B and the payee receives currency C. For details see [Swap-to-Conversion Payment](https://docs.request.network/advanced/request-network-sdk/sdk-guides/payment/swap-to-conversion-request)
+
+## Ecosystem
+
+### Request Client
+
+The Request Client is a Javascript library that interacts directly with the Request Protocol. The Request Client connects to a Request Node.
+
+### Request Node
+
+Request Nodes are HTTP servers exposing an API that allows the Request Client to communicate with the Request Protocol. These servers abstract the complexity of IPFS and Ethereum used by the Request Protocol.
+
+### Request Protocol
+
+The Request Protocol is the underlying protocol that powers Request. It defines how requests are stored on a distributed ledger and how to interpret actions performed on them.
+
+## Blockchain, Cryptography
+
+### Confirmation
+
+Confirmation means that the network has verified the blockchain transaction. This happens through a process known as mining in a proof-of-work system (e.g., Bitcoin). Once a transaction is confirmed, it cannot be reversed.
+
+### Ether
+
+Ether is the native token of the Ethereum blockchain, which is used to pay for transaction fees, block proposer rewards, and other services on the network.
+
+### IPFS
+
+The Inter-Planetary File System (IPFS) is a protocol and a peer-to-peer network for storing and sharing data in a distributed file system. IPFS uses content-addressing to uniquely identify each file in a global namespace connecting all computing devices.
+
+The Request Protocol uses IPFS to ensure data accessibility.
+
+### Multi-signature
+
+Multi-signature (multisig) wallets allow multiple parties to require more than one key to authorize a transaction. The needed number of signatures is agreed upon at the creation of the wallet. Multi-signature addresses have a much greater resistance to theft.
+
+### Private Key
+
+A private key is a large number that allows you to sign or decrypt messages. Private keys can be thought of as a password; private keys must never be revealed to anyone but you, as they allow you to spend the funds from your wallet through a cryptographic signature.
\ No newline at end of file
diff --git a/images/checks-passed.png b/images/checks-passed.png
deleted file mode 100644
index 3303c77..0000000
Binary files a/images/checks-passed.png and /dev/null differ
diff --git a/images/hero-dark.png b/images/hero-dark.png
deleted file mode 100644
index a61cbb1..0000000
Binary files a/images/hero-dark.png and /dev/null differ
diff --git a/images/hero-light.png b/images/hero-light.png
deleted file mode 100644
index 68c712d..0000000
Binary files a/images/hero-light.png and /dev/null differ
diff --git a/index.mdx b/index.mdx
index 15c23fb..b57fcde 100644
--- a/index.mdx
+++ b/index.mdx
@@ -1,97 +1,94 @@
----
-title: "Introduction"
-description: "Welcome to the new home for your documentation"
----
-
-## Setting up
-
-Get your documentation site up and running in minutes.
-
-
- Follow our three step quickstart guide.
-
-
-## Make it yours
-
-Design a docs site that looks great and empowers your users.
-
-
-
- Edit your docs locally and preview them in real time.
-
-
- Customize the design and colors of your site to match your brand.
-
-
- Organize your docs to help users find what they need and succeed with your product.
-
-
- Auto-generate API documentation from OpenAPI specifications.
-
-
-
-## Create beautiful pages
-
-Everything you need to create world-class documentation.
-
-
-
- Use MDX to style your docs pages.
-
-
- Add sample code to demonstrate how to use your product.
-
-
- Display images and other media.
-
-
- Write once and reuse across your docs.
-
-
-
-## Need inspiration?
-
-
- Browse our showcase of exceptional documentation sites.
-
+---
+title: "Request Network Docs"
+description: "A protocol for creating payment requests and reconciling payments."
+sidebarTitle: "Welcome"
+mode: "center"
+---
+
+## What is a Payment Request?
+
+Request Network transforms how businesses handle Web3 payments by creating transparent, traceable payment requests that both parties can trust. Unlike traditional payment methods where you send money and hope for the best, Request Network creates an immutable record that tracks the entire payment lifecycle.
+
+**Key Benefits:**
+- **100% Payment Reconciliation** - Never lose track of who paid what
+- **Multi-Currency Support** - Invoice in USD, get paid in crypto across 10+ chains
+- **Instant Settlement** - No waiting for bank transfers or payment processor holds
+- **Programmable Payments** - crypto-to-fiat, crosschain, recurring, batch, and conversion payment flows
+
+## Interactive Demo
+
+
+ Experience how creating an invoice and getting paid is better than asking someone to send you money and hoping they remember to tell you they sent it.
+
+ *Interactive demo will be embedded here*
+
+
+## Get Started
+
+Choose your path based on what you want to build:
+
+
+
+ Explore specific business scenarios: invoicing, payouts, payroll, checkout, and subscriptions
+
+
+
+ Technical documentation for payment types, webhooks, and advanced features
+
+
+
+ SDK documentation and advanced implementation topics
+
+
+
+
+
+ Supported chains, currencies, smart contracts, and community resources
+
+
+
+ Stay updated with the latest features and improvements
+
+
+
+## Popular
+
+
+
+ 1. [Get API Keys](/api-setup/getting-started) (2 minutes)
+ 2. [Create your first request](/use-cases/invoicing) (1 minute)
+ 3. [Test payment flow](/api-features/payment-types) (2 minutes)
+
+
+
+ 1. [Try EasyInvoice Demo](/use-cases/invoicing) - See full invoicing workflow
+ 2. [Explore Use Cases](/use-cases/payouts) - Discover business applications
+ 3. [Fork & Customize](/use-cases/invoicing) - Make it your own
+
+
+
+ 1. [Check Supported Chains](/resources/supported-chains-and-currencies)
+ 2. [Review Payment Types](/api-features/payment-types)
+ 3. [Explore Use Cases](/use-cases/invoicing) that match your needs
+
+
\ No newline at end of file
diff --git a/logo/dark.svg b/logo/dark.svg
index 8b343cd..581b6c1 100644
--- a/logo/dark.svg
+++ b/logo/dark.svg
@@ -1,21 +1,59 @@
-