> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shakesco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# @shakesco/automation

> Integrate recurring crypto payments with the @shakesco/automation JavaScript SDK

<span style={{display:"none"}}>For the complete documentation index, see [llms.txt](/llms.txt).</span>

## Prerequisites

Before integrating:

<Steps>
  <Step title="Get API keys">
    Obtain from [Shakesco Dashboard](https://users.shakesco.com/login)
  </Step>

  <Step title="Deploy Business Auto account">
    Use the [Shakesco app](https://get.shakesco.com)
  </Step>

  <Step title="Fund your account">
    Follow the [funding guide](/auto-payments/fund-card)
  </Step>
</Steps>

<Info>
  Review [how auto-payments work](/auto-payments/how-it-works) to understand the
  system architecture.
</Info>

***

## Installation

```bash theme={null}
npm i @shakesco/automation
```

Import the SDK:

```javascript theme={null}
const { Automation, parseUnits } = require("@shakesco/automation");
```

***

## Testing Mode

<Note>
  Test addresses are automatically funded - no need to add balance in testing
  mode.
</Note>

### Request Test Address

```javascript theme={null}
const your_smart_wallet_address = ""; // Same for Ethereum and Polygon

const shakescocontract = new Automation(
  your_smart_wallet_address,
  process.env.SHAKESCOAPIKEY,
  "11155111" // Sepolia testnet
);

const requestAddress = await shakescocontract.testDelegateAddressBuss();
console.log(requestAddress);
// {
//   id: "1",
//   test_delegate_address: "0x472ef8282b420396ad307cb89f542e60b1dec1a1"
// }
```

### Send Test Request

```javascript theme={null}
const address = ""; // Your test delegate address from above

const shakescocontract = new Automation(
  address,
  process.env.SHAKESCOAPIKEY,
  "11155111"
);

const period = "86400"; // 1 day

const requestUser = await shakescocontract.requestUser(
  "0x309E7d835ccE6E74BC72A2E523fa7f79FFC0d413", // Test user address
  "", // No token (native currency)
  period,
  "", // No amount in test mode
  false, // No split payment
  [], // No split addresses
  [] // No split amounts
);

console.log(requestUser); // "Requested user successfully"
```

<Tip>
  Check your Shakesco app: - Business requests → Business Wallet - User requests
  → Personal Wallet
</Tip>

***

## Production Integration

### Network IDs

| Network  | Chain ID |
| -------- | -------- |
| Ethereum | `"1"`    |
| Polygon  | `"137"`  |

### Basic Request Flow

**Step 1: Initialize SDK**

```javascript theme={null}
const address = ""; // From dashboard: users.shakesco.com

const shakescocontract = new Automation(
  address,
  process.env.SHAKESCOAPIKEY,
  "137" // Polygon
);
```

**Step 2: Prepare parameters**

```javascript theme={null}
const period = "604800"; // 1 week (seconds)
const amount = parseUnits("20", 18); // $20 USD
const delegateAddress = ""; // User's Shakesco card address
```

**Step 3: Send request**

```javascript theme={null}
// For users
const requestUser = await shakescocontract.requestUser(
  delegateAddress,
  "", // Token address (empty = native)
  period,
  amount,
  false, // Split payment
  [], // Split addresses
  [] // Split amounts
);

// For businesses
const requestBusiness = await shakescocontract.requestBusiness(
  delegateAddress,
  "", // Token address
  period,
  amount
);
```

<Info>
  <ul>
    <li>Period: seconds (e.g., `"604800"` = 1 week)</li>
    <li>Amount: USD (e.g., `parseUnits("20", 18)` = \$20)</li>
    <li>Boolean returns: strings (`"true"` / `"false"`)</li>
  </ul>
</Info>

***

## Pre-Request Checks

### Verify User Can Be Requested

```javascript theme={null}
const shakescocontract = new Automation(
  your_smart_wallet_address,
  process.env.SHAKESCOAPIKEY,
  "1"
);

const canRequest = await shakescocontract.canRequest(delegateAddress);
console.log(canRequest); // {"id": 1, "status": "true"}
```

If `status: "false"`, user must accept requests in Shakesco app first.

### Check If Payer Is Business

Different [fee rates](https://shakesco.com/charges) apply for B2B vs B2C:

```javascript theme={null}
const isBusiness = await shakescocontract.isBusiness(delegateAddress);
console.log(isBusiness); // {"id": 1, "is_business": false}
```

***

## Token Payments

Request payment in USDT (stablecoin).

**Polygon example:**

```javascript theme={null}
const tokenAddress = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; // USDT

const shakescocontract = new Automation(
  address,
  process.env.SHAKESCOAPIKEY,
  "137"
);

const requestUser = await shakescocontract.requestUser(
  delegateAddress,
  tokenAddress,
  "604800",
  parseUnits("20", 18),
  false,
  [],
  []
);
```

**Supported token on Polygon:** USDT only

**Ethereum example:**

```javascript theme={null}
const tokenAddress = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; // USDT

const shakescocontract = new Automation(
  address,
  process.env.SHAKESCOAPIKEY,
  "1"
);

const requestUser = await shakescocontract.requestUser(
  delegateAddress,
  tokenAddress,
  "604800",
  parseUnits("20", 18),
  false,
  [],
  []
);
```

**Supported token on Ethereum:** USDT only

[See all token addresses →](/auto-payments/how-it-works#supported-tokens)

<Warning>
  Token addresses must be checksummed. Use addresses from the documentation
  exactly.
</Warning>

***

## Check Payment Status

**Critical:** Verify payment before granting service access:

```javascript theme={null}
const shakescocontract = new Automation(
  address,
  process.env.SHAKESCOAPIKEY,
  "137"
);

const hasPaid = await shakescocontract.hasPaid(delegateAddress);
console.log(hasPaid); // "true" or "false"
```

<Warning>
  **Always check payment status before delivering service.** This is your only
  verification method.
</Warning>

***

## Additional Methods

### Check If User Was Requested

```javascript theme={null}
const isRequested = await shakescocontract.isRequested(delegateAddress);
console.log(isRequested); // "true" / "false"
```

***

## Pricing & Fees

<CardGroup cols={2}>
  <Card title="Pricing Plans" icon="dollar-sign" href="https://shakesco.com/pricing">
    View subscription tiers and rates
  </Card>

  <Card title="Transaction Fees" icon="file-invoice-dollar" href="https://shakesco.com/charges">
    See per-transaction charges
  </Card>
</CardGroup>

***

## Need Custom Intervals?

Daily automation not offered by default. Need it? [Contact us](https://shakesco.com/contact).

***

## Next Steps

<Card title="API Integration" icon="webhook" href="/api-reference/auto-payments/request/">
  Prefer REST API? View the API documentation
</Card>

***
