> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to HitPay

The HitPay connector lets your AI agent act in each user's HitPay account. Each user signs in to HitPay once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 39 tools.

**Authentication:** OAuth 2.0
**Categories:** Accounting & Finance
**Tools:** 39: 18 read, 14 write, 7 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own HitPay app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=HITPAY)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the HitPay connection

   In **AgentKit > Connections**, create a HitPay connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   HitPay connections use your own OAuth app. Register one with HitPay and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the HitPay connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'hitpay'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize HitPay:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'hitpay_get_business_info',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "hitpay"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize HitPay:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="hitpay_get_business_info",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'hitpay_get_business_info',
  toolInput: {},
  connector: 'hitpay',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="hitpay_get_business_info",
    tool_input={},
    connection_name="hitpay",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `hitpay_get_business_info`

Get Business Info · Read-only

Fetch the profile of the HitPay business the connected account belongs to.
Returns the business name, country, currency, and whether payments are enabled.
Use this first to confirm which merchant is connected. Use list_charges for transaction data.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `hitpay_get_charge`

Get Charge · Read-only

Fetch one charge (a received payment) by id.
Returns amount, fees, refunded amount, status, currency, payment method, and customer details.
Use this before create_refund to confirm the payment id and refundable amount. Use list_charges to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `charge_id` (`string`, required): ID of the charge (payment). Get it from list_charges.

Example input: `{"charge_id":"<charge_id>"}`

### `hitpay_get_customer`

Get Customer · Read-only

Fetch one saved customer by id.
Returns name, email, phone number, address, gender, birth date, and remark.
Use this to view a customer in full. Use list_customers to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customer_id` (`string`, required): ID of the customer. Get it from list_customers or create_customer.

Example input: `{"customer_id":"<customer_id>"}`

### `hitpay_get_order`

Get Order · Read-only

Fetch one order by id.
Returns status, currency, customer, line items, charges, and discount and tax totals.
Use this to view an order in full. Use list_orders to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_id` (`string`, required): ID of the order. Get it from list_orders or create_order.

Example input: `{"order_id":"<order_id>"}`

### `hitpay_get_payment_request`

Get Payment Request · Read-only

Fetch one payment request and its current status by id.
Returns id, status (pending, completed, failed, expired, canceled, or inactive), amount, currency, purpose, reference number, and checkout url.
Use this to check whether a customer has paid. Use list_payment_requests to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `request_id` (`string`, required): ID of the payment request. Get it from create_payment_request or list_payment_requests.

Example input: `{"request_id":"<request_id>"}`

### `hitpay_get_product`

Get Product · Read-only

Fetch one product by id.
Returns name, description, price, currency, status, categories, and variations.
Use this to view a product in full. Use list_products to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `product_id` (`string`, required): ID of the product. Get it from list_products.

Example input: `{"product_id":"<product_id>"}`

### `hitpay_get_recurring_billing`

Get Recurring Billing · Read-only

Fetch one recurring billing subscription by id.
Returns customer, plan id, amount, cycle, times charged, status, and payment methods.
Use this to view a subscription in full. Use list_recurring_billings to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `recurring_billing_id` (`string`, required): ID of the recurring billing record. Get it from list_recurring_billings or create_recurring_billing.

Example input: `{"recurring_billing_id":"<recurring_billing_id>"}`

### `hitpay_get_refund`

Get Refund · Read-only

Fetch one refund by id.
Returns refund id, payment id, amount refunded, total amount, currency, status, and timestamps.
Use this to check refund progress. Use create_refund to issue a new refund.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `refund_id` (`string`, required): ID of the refund. Get it from create_refund.

Example input: `{"refund_id":"<refund_id>"}`

### `hitpay_get_subscription_plan`

Get Subscription Plan · Read-only

Fetch one subscription plan by id.
Returns name, description, cycle, currency, amount, and reference.
Use this to view a plan in full. Use list_subscription_plans to find the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `plan_id` (`string`, required): ID of the subscription plan. Get it from list_subscription_plans or create_subscription_plan.

Example input: `{"plan_id":"<plan_id>"}`

### `hitpay_list_charges`

List Charges · Read-only

List payments (charges) received by the business, filtered by status, date range, amount, customer, or payment request.
Returns a page of charges with id, amount, currency, fees, status, payment method, and a cursor for the next page.
Use this to review transactions. Use get_charge for one charge in full.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `amount_from` (`number`, optional): Return charges with an amount at or above this value. Example: 10.
- `amount_to` (`number`, optional): Return charges with an amount at or below this value. Example: 500.
- `cursor` (`string`, optional): Cursor for the next page. Pass the meta.next_cursor value from the previous response. Leave empty for the first page. Example: eyJpZCI6MTIzfQ.
- `customer_id` (`string`, optional): Return only charges made by this customer. Get the id from list_customers. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `date_from` (`string`, optional): Return charges created on or after this date, in YYYY-MM-DD format. Example: 2026-01-01.
- `date_to` (`string`, optional): Return charges created on or before this date, in YYYY-MM-DD format. Example: 2026-01-31.
- `keywords` (`string`, optional): Search for fields: amount ,charge_id ,customer_email, remark. Example: coffee.
- `payment_request_id` (`string`, optional): Return only charges paid against this payment request. Get the id from list_payment_requests. Example: 974ee233-bc3e-4aac-a212-15af0d155133.
- `payout_id` (`string`, optional): Return only charges included in this payout. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `per_page` (`integer`, optional): Number of results per page. Example: 20.
- `status` (`string`, optional): Filter charges by status: succeeded, failed, or refunded. Leave empty for all statuses. Example: succeeded. One of: `succeeded`, `failed`, `refunded`.

Example input: `{}`

### `hitpay_list_customers`

List Customers · Read-only

List the business's saved customers.
Returns a page of customers with id, name, email, phone number, address, and timestamps.
Use this to find a customer id. Use get_customer for one customer.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`number`, optional): Page number to return, starting at 1. Example: 1.
- `per_page` (`number`, optional): Number of results per page. Example: 20.

Example input: `{}`

### `hitpay_list_invoices`

List Invoices · Read-only

List the business's invoices, optionally filtered by customer email, status, or reference.
Returns a page of invoices (the vendor reference documents no response body for this call).
Use this to find an invoice id for update_invoice or delete_invoice.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customer_email` (`string`, optional): Return only invoices for this customer email. Example: jane@example.com.
- `page` (`string`, optional): The page index. Example: 1.
- `per_page` (`string`, optional): The number of per page. Example: 20.
- `reference` (`string`, optional): Return only invoices with this reference. Example: ORDER-1001.
- `status` (`string`, optional): Filter invoices by status. Example: paid.

Example input: `{}`

### `hitpay_list_orders`

List Orders · Read-only

List the business's orders, optionally filtered by keyword or date range.
Returns orders with id, display number, status, currency, line items, and totals.
Use this to browse orders. Use get_order for one order.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `dateFrom` (`string`, optional): Return orders created on or after this date, in YYYY-MM-DD format. Example: 2026-01-01.
- `dateTo` (`string`, optional): Return orders created on or before this date, in YYYY-MM-DD format. Example: 2026-01-31.
- `keywords` (`string`, optional): Search for fields: amount ,created_at ,order id, remark, customer_name. Example: coffee.
- `perPage` (`integer`, optional): Number of results per page. Example: 20.
- `version` (`string`, optional): Order format version to return, 1.0 or 2.0. Example: 2.0. One of: `1.0`, `2.0`.
- `with` (`string`, optional): Related data to include with each order. Example: products.

Example input: `{}`

### `hitpay_list_payment_requests`

List Payment Requests · Read-only

List the business's payment requests, optionally searching by email, id, or reference number.
Returns a page of payment requests with id, status, amount, currency, and checkout url.
Use this to browse or look up requests. Use get_payment_request when you already have the id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `current_page` (`integer`, optional): Page number to return, starting at 1. The HitPay API uses current_page here, not page. Example: 1.
- `is_default` (`boolean`, optional): When true, return only default payment links (created from the dashboard or a payment link). Leave empty for all payment requests.
- `per_page` (`integer`, optional): Number of payment requests per page. Example: 20.
- `search` (`string`, optional): Search by buyer email, payment request id, or reference number (partial match). Example: jane@example.com.

Example input: `{}`

### `hitpay_list_product_categories`

List Product Categories · Read-only

List product categories, optionally filtered by parent, active state, or keyword.
Returns a page of categories with id, name, description, active flag, and child categories.
Use this to find category ids that appear on products.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Set to true to return only active categories, or false for inactive ones. Example: true.
- `keywords` (`string`, optional): Filter by keywords, name. Example: coffee.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `parent_id` (`string`, optional): Return only child categories of this parent category id. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `perPage` (`integer`, optional): Number of results per page. Example: 20.

Example input: `{}`

### `hitpay_list_products`

List Products · Read-only

List products in the business's HitPay catalog, optionally searching by keyword.
Returns a page of products with id, name, price, currency, status, and category ids.
Use this to find a product id for an invoice. Use get_product for one product.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `keywords` (`array`, optional): Free-text search term. Example: coffee.
- `page` (`number`, optional): Page number to return, starting at 1. Example: 1.
- `per_page` (`number`, optional): Number of results per page. Example: 20.

Example input: `{}`

### `hitpay_list_recurring_billings`

List Recurring Billings · Read-only

List recurring billing subscriptions, optionally filtered by customer email, reference, plan, or status.
Returns recurring billing records with id, customer, plan, amount, cycle, and status (the vendor reference documents no response body for this call).
Use this to find a recurring billing id. Use get_recurring_billing for one record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `business_recurring_plans_id` (`string`, optional): Return only subscriptions on this subscription plan. Get the id from list_subscription_plans. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `customer_email` (`string`, optional): Return only subscriptions for this customer email. Example: jane@example.com.
- `reference` (`string`, optional): Return only subscriptions with this reference. Example: ORDER-1001.
- `status` (`string`, optional): Filter by status: active, scheduled, retrying, inactive, or canceled. Example: active. One of: `active`, `scheduled`, `retrying`, `inactive`, `canceled`.

Example input: `{}`

### `hitpay_list_subscription_plans`

List Subscription Plans · Read-only

List recurring billing subscription plans.
Returns a page of plans with id, name, cycle, currency, and amount.
Use this to find a plan id for create_recurring_billing. Use get_subscription_plan for one plan.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`number`, optional): Page number to return, starting at 1. Example: 1.
- `per_page` (`number`, optional): Number of plans per page. Example: 20.

Example input: `{}`

### `hitpay_charge_saved_card`

Charge Saved Card · Write

Charge the card or payment method saved on a recurring billing record for a given amount.
Returns the payment id, recurring billing id, amount, currency, and status.
Use this for on-demand charges against a saved payment method. The record must have been created with save_card enabled.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `amount` (`integer`, required): Amount to bill, as a whole number, in the plan or record currency. Maximum 999999.99. Example: 25.
- `currency` (`string`, required): The currency. Example: SGD.
- `recurring_billing_id` (`string`, required): ID of the recurring billing record. Get it from list_recurring_billings or create_recurring_billing.

Example input: `{"amount":25,"currency":"<currency>","recurring_billing_id":"<recurring_billing_id>"}`

### `hitpay_create_customer`

Create Customer · Write

Create a saved customer in the business's HitPay account.
Returns the new customer with its id.
Use this before creating an invoice or order for a new customer. Use update_customer to edit an existing one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `email` (`string`, required): The email of the customer. Example: jane@example.com.
- `phone_number` (`string`, required): The phone number of the customer. Example: 91234567.
- `address` (`object`, optional): Postal address as an object. Example: {"line1": "1 Raffles Place", "city": "Singapore", "state": "Singapore", "country": "SG", "postal_code": "048616"}. Required keys inside the object are line1, city, state, country, and postal_code for payment requests; customers use street, city, state, and postal_code.
- `birth_date` (`string`, optional): The birth date of the customer. Example: 1990-05-21.
- `gender` (`string`, optional): The gender of the customer. Example: female.
- `name` (`string`, optional): The name of the customer. Example: Jane Tan.
- `phone_number_country_code` (`string`, optional): The country code of the phone number. Example: 65.
- `remark` (`string`, optional): The remark of the customer. Example: Gift wrap requested.

Example input: `{"email":"<email>","phone_number":"<phone_number>"}`

### `hitpay_create_invoice`

Create Invoice · Write

Create an invoice for a customer, optionally with products, discounts, and partial payments.
Returns the created invoice (the vendor reference documents no response body for this call).
Use this to bill a customer for products or a fixed amount. Use create_payment_request for a one-off payment link.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `currency` (`string`, required): Three-letter currency code for the invoice. Example: SGD.
- `invoice_date` (`string`, required): Date the invoice is issued, in YYYY-MM-DD format. Example: 2026-01-15.
- `payment_by` (`string`, required): Whether the invoice is billed by product (send products) or by amount (send amount and subtotal). Example: product.
- `allow_partial_payments` (`string`, optional): Set to 1 to let the customer pay the invoice in instalments (also set partial_payments), or 0 for a single payment. Example: 0.
- `amount` (`number`, optional): Invoice total amount in the invoice currency. Only needed when payment_by is amount. Example: 90.00.
- `auto_invoice_number` (`string`, optional): Set to true to have HitPay assign the invoice number automatically instead of sending invoice_number. Example: true.
- `customer` (`object`, optional): New customer details for the invoice as an object with name, email, and an optional address. Use customer_id instead for a saved customer. Example: {"name": "Jane Tan", "email": "jane@example.com"}.
- `customer_id` (`string`, optional): ID of a saved customer to bill. Get it from list_customers. Use customer instead to enter new customer details. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `due_date` (`string`, optional): Date the invoice is due, in YYYY-MM-DD format. Example: 2026-02-15.
- `footer` (`string`, optional): Text shown at the bottom of the invoice. Example: Thank you for your business.
- `invoice_number` (`string`, optional): Your own invoice number. Leave empty when auto_invoice_number is set. Example: INV-0001.
- `partial_payments` (`array`, optional): Instalment schedule as an array of objects, each with an amount and a due_date. Use with allow_partial_payments. Example: [{"amount": 50, "due_date": "2026-02-01"}, {"amount": 50, "due_date": "2026-03-01"}].
- `payment_methods` (`array`, optional): Payment methods the customer may use, as an array of method codes available on your HitPay account and currency. Example: ["card", "paynow_online"].
- `products` (`array`, optional): Line items as an array of objects, each with a product_id and optional quantity, variation_id, and discount. Get product ids from list_products. Example: [{"product_id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d", "quantity": "2"}].
- `recipients` (`array`, optional): People who receive the invoice, as an array of objects with an email or a customer_id. Example: [{"email": "jane@example.com"}].
- `reference` (`string`, optional): Your own reference for the invoice, used to match it to your internal systems. Example: ORDER-1001.
- `send_email` (`integer`, optional): Set to 1 to have HitPay email receipts to the customer, or 0 for no email. HitPay defaults to 0. Example: 1.
- `stackable_discounts` (`array`, optional): Discounts applied in sequence, as an array of objects, each with a name, a discount amount, a percentage_discount, and an order. Example: [{"name": "Early bird", "discount": "5", "percentage_discount": "0", "order": "1"}].
- `subtotal` (`number`, optional): Subtotal before discounts and tax. Needed when payment_by is amount. Example: 90.00.
- `tax_setting` (`string`, optional): ID of the tax to apply to the invoice, taken from the tax settings in the HitPay dashboard. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `webhook` (`string`, optional): URL HitPay calls with a POST when the invoice is paid. Example: https://yourshop.example.com/hitpay/webhook.

Example input: `{"currency":"<currency>","invoice_date":"<invoice_date>","payment_by":"<payment_by>"}`

### `hitpay_create_order`

Create Order · Write

Create an order for the business.
Returns the new order with its id, status, and totals.
Use this to record a sale. Use update_order to change an existing order.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `amount` (`number`, required): Total amount of the order in the order currency. Example: 25.00.
- `currency` (`string`, required): Three-letter currency code of the order. HitPay defaults to SGD. Example: SGD.
- `business_user_id` (`string`, optional): ID of the staff user who took the order. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `channel` (`string`, optional): Sales channel of the order. HitPay defaults to point_of_sale. Example: point_of_sale.
- `customer_id` (`string`, optional): ID of the saved customer who placed the order. Get it from list_customers. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `customer_pickup` (`boolean`, optional): Whether the customer collects the order in person (true) or not (false). HitPay defaults to true. Example: true.
- `discount_amount` (`number`, optional): Discount amount deducted from the order. Example: 5.00.
- `discount_reason` (`string`, optional): Why a discount was applied to the order. Example: Loyalty discount.
- `location_id` (`string`, optional): ID of the business location the order belongs to. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `remark` (`string`, optional): Free-text note stored on the order. Example: Gift wrap requested.
- `version` (`string`, optional): Order format version, 1.0 or 2.0. HitPay defaults to 1.0. Example: 1.0.

Example input: `{"amount":25,"currency":"<currency>"}`

### `hitpay_create_payment_request`

Create Payment Request · Write

Create a HitPay payment request and get back a hosted checkout link to send to a customer.
Returns the payment request id, status, amount, currency, and the checkout url.
Use this to start collecting a payment. Use update_payment_request to change an unpaid request and get_payment_request to check its status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `currency` (`string`, required): It's required field. Currency related to the payment. Example: SGD.
- `add_admin_fee` (`string`, optional): If set to true, the admin fee will be included in total. One of: `true`, `false`.
- `address` (`object`, optional): Postal address as an object. Example: {"line1": "1 Raffles Place", "city": "Singapore", "state": "Singapore", "country": "SG", "postal_code": "048616"}. Required keys inside the object are line1, city, state, country, and postal_code for payment requests; customers use street, city, state, and postal_code.
- `allow_repeated_payments` (`string`, optional): If set to true, multiple payments can be paid on a payment request link. Default value is false. One of: `true`, `false`.
- `amount` (`number`, optional): It's optional field. Amount related to the payment. Example: 2500. If we pass, it should be greater than 0.3 and less than 999999999.99.
- `business_location_id` (`string`, optional): The active location belongs to business. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `email` (`string`, optional): Buyer’s email. Example: jane@example.com.
- `expires_after` (`string`, optional): E.g "30 mins" Other supported keys are "mins", "hours", "days". Example: 30 mins.
- `expiry_date` (`string`, optional): Time after which the payment link will be expired (time in SG with YYYY-MM-DD HH:mm:ss format). Applicable for repeated payments. Example: 2026-12-31 23:59:59.
- `generate_qr` (`boolean`, optional): Only valid for paynow_online, qrph_netbank, doku_qris and shopee_pay if generate_qr was true.
- `location_id` (`string`, optional): The active location belongs to business. Support both `location_id` and `business_location_id` for backward compatibility, but we recommend using `business_location_id` for future use. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `metadata` (`object`, optional): Support the key-value. The value must be string type, and the max length of the value is 500 characters, up to 50 key-value. Example: {"car_model": "toyota", "car_color": "red"}.
- `name` (`string`, optional): Buyer’s name. Example: Jane Tan.
- `payment_methods` (`array`, optional): They're available payment methods supported on your account.(Example: paynow_online , card, wechat, alipay, grabpay_direct, grabpay_paylater, shopee_pay ... etc.). If we don't pass, use the available methods.
- `phone` (`string`, optional): Buyer’s phone number and should be in E.164 format. Example: +6591234567.
- `purpose` (`string`, optional): Purpose of the Payment request. Example: Order 123.
- `redirect_url` (`string`, optional): URL where we redirect the user after a payment. Query arguments reference (payment request id) and status are sent along. Example: https://yourshop.example.com/order/123/complete.
- `reference_number` (`string`, optional): Arbitrary reference number that you can map to your internal reference number. This value cannot be edited by the customer. Example: ORDER-1001.
- `send_email` (`string`, optional): It's "true" or "false". If set to true, an email receipt will be sent to the customer after the payment is completed. Default is false. One of: `true`, `false`.
- `send_sms` (`string`, optional): It's "true" or "false". If set to "true", SMS will be sent to the customer after the payment is completed. Default is false. One of: `true`, `false`.
- `staff_id` (`string`, optional): It's active staff id from the dashboard. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `webhook` (`string`, optional): URL where our server do POST request after a payment If done. Example: https://yourshop.example.com/hitpay/webhook.

Example input: `{"currency":"<currency>"}`

### `hitpay_create_recurring_billing`

Create Recurring Billing · Write

Create a recurring billing subscription for a customer, from a plan or with custom amount and cycle.
Returns the created recurring billing record (the vendor reference documents no response body for this call).
Use this to subscribe a customer. Use create_subscription_plan first to define a reusable plan.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `customer_email` (`string`, required): Customer's email. Example: jane@example.com.
- `amount` (`integer`, optional): Amount to bill, as a whole number, in the plan or record currency. Maximum 999999.99. Example: 25.
- `customer_name` (`string`, optional): Customer's name. Example: Jane Tan.
- `cycle` (`string`, optional): Billing frequency: weekly, monthly, yearly, or custom. Required when plan_id is empty; otherwise the plan cycle is used. Example: monthly. One of: `weekly`, `monthly`, `yearly`, `custom`.
- `cycle_frequency` (`string`, optional): It is required field when the cycle is custom. For cycle = custom, set the frequency for cycle repeat field options [day, week, month, year]. One of: `day`, `week`, `month`, `year`.
- `cycle_repeat` (`integer`, optional): It is required field when cycle is custom. New cycle will only be affective at the end of the current cycle.
- `name` (`string`, optional): Name of the subscription. Required when save_card is true or plan_id is empty; otherwise the plan name is used. Example: Premium membership.
- `payment_methods` (`array`, optional): Payment methods allowed for the subscription, as an array containing card, giro, or shopee_recurring. Example: ["card"].
- `plan_id` (`string`, optional): Subscription plan id created from Create a Subscription Plan API. If you would like to create a subscription without a plan, plan_id should be null. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `redirect_url` (`string`, optional): URL where HitPay redirects the user after the users enters the card details and the subscription is active. Query arguments reference (subscription id) and status are sent along. Example: https://yourshop.example.com/order/123/complete.
- `reference` (`string`, optional): Your own reference for this record, used to match it to your internal systems. Example: ORDER-1001.
- `save_card` (`string`, optional): Only set the value “true” if you wish to save the card and charge the customer later on. More details in “Save Card” section. One of: `true`, `false`.
- `save_payment_method` (`string`, optional): It's new field that will replace save_card field in the future. Only set the value “true” if you wish to save the payment method and charge the customer later on. More details in “Save Payment Method” section. One of: `true`, `false`.
- `send_email` (`string`, optional): HitPay to send email receipts to the customer. Default value is false. One of: `true`, `false`.
- `start_date` (`string`, optional): Required when save_card is not true. Billing start date (YYYY-MM-DD) in SGT. Must be today or a future date. Example: 2026-02-01.
- `start_date_method` (`string`, optional): It's an optional field and only applicable when save_payment_method is true. By default, the start_date_method is null. Options are sign_up_date or no_initial_charge. One of: `sign_up_date`, `no_initial_charge`.
- `times_to_be_charged` (`number`, optional): It's time to be charged. Default value is 1.

Example input: `{"customer_email":"<customer_email>"}`

### `hitpay_create_refund`

Create Refund · Write

Refund all or part of a completed charge.
Returns the refund id, payment id, amount refunded, currency, and status.
Use this to return money to a customer. Use get_refund to check an existing refund.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `amount` (`number`, required): The remaining amount to be refunded.
- `payment_id` (`string`, required): Payment ID for the successful payment request. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `email` (`string`, optional): Email address of the person. Example: jane@example.com.
- `send_email` (`string`, optional): Whether to email the customer. Use true or false as the HitPay API expects. Example: true. One of: `true`, `false`.
- `webhook` (`string`, optional): The webhook URL. Example: https://yourshop.example.com/hitpay/webhook.

Example input: `{"amount":90,"payment_id":"<payment_id>"}`

### `hitpay_create_subscription_plan`

Create Subscription Plan · Write

Create a reusable recurring billing plan with a name, amount, and billing cycle.
Returns the new plan with its id.
Use this to define a plan before subscribing customers with create_recurring_billing.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `amount` (`integer`, required): Amount to bill, as a whole number, in the plan or record currency. Maximum 999999.99. Example: 25.
- `cycle` (`string`, required): Billing frequency (weekly / monthly / yearly / custom). If cycle = custom then the user has to send the fields cycle_repeat and cycle_frequency. One of: `weekly`, `monthly`, `yearly`, `custom`.
- `name` (`string`, required): Plan name. It's required field. Example: Premium membership.
- `currency` (`string`, optional): Three-letter currency code for the amount. Example: SGD.
- `cycle_frequency` (`string`, optional): [This field is only applicable when cycle = custom] It's the frequency of the cycle [day / week / month / year]. One of: `day`, `week`, `month`, `year`.
- `cycle_repeat` (`integer`, optional): [This field is only applicable when cycle = custom] It's the number of times the cycle will repeat.
- `description` (`string`, optional): The description of subscription plan. Example: Monthly premium membership.
- `fixed_date` (`number`, optional): it's required if start_date_method = fixed_date.
- `redirect_url` (`string`, optional): The redirected URL after the payment. Example: https://yourshop.example.com/order/123/complete.
- `reference` (`string`, optional): Arbitrary reference number that you can map to your internal reference number. This value cannot be edited by the customer. Example: ORDER-1001.
- `start_date_method` (`string`, optional): How the billing start date is chosen. Valid values depend on the endpoint; see the allowed options. Example: sign_up_date. One of: `sign_up_date`, `customer_select_date`, `fixed_date`.
- `times_to_be_charged` (`number`, optional): How many times the customer is charged before the subscription ends. Leave empty to charge until cancelled. Example: 12.

Example input: `{"amount":25,"cycle":"weekly","name":"<name>"}`

### `hitpay_update_customer`

Update Customer · Write

Update fields on a saved customer. Only the fields you send are changed.
Returns the updated customer.
Use this to correct contact details. Use create_customer for a new customer.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `customer_id` (`string`, required): ID of the customer. Get it from list_customers or create_customer.
- `address` (`object`, optional): Postal address as an object. Example: {"line1": "1 Raffles Place", "city": "Singapore", "state": "Singapore", "country": "SG", "postal_code": "048616"}. Required keys inside the object are line1, city, state, country, and postal_code for payment requests; customers use street, city, state, and postal_code.
- `birth_date` (`string`, optional): The birth date of the customer. Example: 1990-05-21.
- `email` (`string`, optional): The email of the customer. Example: jane@example.com.
- `gender` (`string`, optional): The gender of the customer. Example: female.
- `name` (`string`, optional): The name of the customer. Example: Jane Tan.
- `phone_number` (`string`, optional): The phone number of the customer. Example: 91234567.
- `phone_number_country_code` (`string`, optional): The country code of the phone number. Example: 65.
- `remark` (`string`, optional): The remark of the customer. Example: Gift wrap requested.

Example input: `{"customer_id":"<customer_id>"}`

### `hitpay_update_invoice`

Update Invoice · Write

Replace the details of an existing invoice.
Returns the updated invoice (the vendor reference documents no response body for this call).
Use this to fix an invoice before it is paid. Use create_invoice for a new one.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `currency` (`string`, required): Three-letter currency code for the invoice. Example: SGD.
- `invoice_date` (`string`, required): Date the invoice is issued, in YYYY-MM-DD format. Example: 2026-01-15.
- `invoice_id` (`string`, required): ID of the invoice. Get it from list_invoices.
- `payment_by` (`string`, required): Whether the invoice is billed by product (send products) or by amount (send amount and subtotal). Example: product.
- `allow_partial_payments` (`string`, optional): Set to 1 to let the customer pay the invoice in instalments (also set partial_payments), or 0 for a single payment. Example: 0.
- `amount` (`number`, optional): Invoice total amount in the invoice currency. Only needed when payment_by is amount. Example: 90.00.
- `auto_invoice_number` (`string`, optional): Set to true to have HitPay assign the invoice number automatically instead of sending invoice_number. Example: true.
- `customer` (`object`, optional): New customer details for the invoice as an object with name, email, and an optional address. Use customer_id instead for a saved customer. Example: {"name": "Jane Tan", "email": "jane@example.com"}.
- `customer_id` (`string`, optional): ID of a saved customer to bill. Get it from list_customers. Use customer instead to enter new customer details. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `due_date` (`string`, optional): Date the invoice is due, in YYYY-MM-DD format. Example: 2026-02-15.
- `footer` (`string`, optional): Text shown at the bottom of the invoice. Example: Thank you for your business.
- `invoice_number` (`string`, optional): Your own invoice number. Leave empty when auto_invoice_number is set. Example: INV-0001.
- `partial_payments` (`array`, optional): Instalment schedule as an array of objects, each with an amount and a due_date. Use with allow_partial_payments. Example: [{"amount": 50, "due_date": "2026-02-01"}, {"amount": 50, "due_date": "2026-03-01"}].
- `payment_methods` (`array`, optional): Payment methods the customer may use, as an array of method codes available on your HitPay account and currency. Example: ["card", "paynow_online"].
- `products` (`array`, optional): Line items as an array of objects, each with a product_id and optional quantity, variation_id, and discount. Get product ids from list_products. Example: [{"product_id": "9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d", "quantity": "2"}].
- `recipients` (`array`, optional): People who receive the invoice, as an array of objects with an email or a customer_id. Example: [{"email": "jane@example.com"}].
- `reference` (`string`, optional): Your own reference for the invoice, used to match it to your internal systems. Example: ORDER-1001.
- `send_email` (`integer`, optional): Set to 1 to have HitPay email receipts to the customer, or 0 for no email. HitPay defaults to 0. Example: 1.
- `stackable_discounts` (`array`, optional): Discounts applied in sequence, as an array of objects, each with a name, a discount amount, a percentage_discount, and an order. Example: [{"name": "Early bird", "discount": "5", "percentage_discount": "0", "order": "1"}].
- `subtotal` (`number`, optional): Subtotal before discounts and tax. Needed when payment_by is amount. Example: 90.00.
- `tax_setting` (`string`, optional): ID of the tax to apply to the invoice, taken from the tax settings in the HitPay dashboard. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `webhook` (`string`, optional): URL HitPay calls with a POST when the invoice is paid. Example: https://yourshop.example.com/hitpay/webhook.

Example input: `{"currency":"<currency>","invoice_date":"<invoice_date>","invoice_id":"<invoice_id>","payment_by":"<payment_by>"}`

### `hitpay_update_order`

Update Order · Write

Update fields on an existing order. Only the fields you send are changed.
Returns the updated order.
Use this to change an order's amount, customer, or remark. Use create_order for a new order.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `order_id` (`string`, required): ID of the order. Get it from list_orders or create_order.
- `amount` (`number`, optional): Total amount of the order in the order currency. Example: 25.00.
- `business_user_id` (`string`, optional): ID of the staff user who took the order. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `channel` (`string`, optional): Sales channel of the order. HitPay defaults to point_of_sale. Example: point_of_sale.
- `currency` (`string`, optional): Three-letter currency code of the order. HitPay defaults to SGD. Example: SGD.
- `customer_id` (`string`, optional): ID of the saved customer who placed the order. Get it from list_customers. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `customer_pickup` (`boolean`, optional): Whether the customer collects the order in person (true) or not (false). HitPay defaults to true. Example: true.
- `discount_amount` (`number`, optional): Discount amount deducted from the order. Example: 5.00.
- `discount_reason` (`string`, optional): Why a discount was applied to the order. Example: Loyalty discount.
- `location_id` (`string`, optional): ID of the business location the order belongs to. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `remark` (`string`, optional): Free-text note stored on the order. Example: Gift wrap requested.
- `version` (`string`, optional): Order format version, 1.0 or 2.0. HitPay defaults to 1.0. Example: 1.0.

Example input: `{"order_id":"<order_id>"}`

### `hitpay_update_payment_request`

Update Payment Request · Write

Update an existing payment request that has not been paid yet.
Returns the updated payment request.
Use this to change the amount, buyer details, expiry, or payment methods. Use create_payment_request for a new request.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `currency` (`string`, required): Currency related to the payment. Example: SGD.
- `request_id` (`string`, required): ID of the payment request. Get it from create_payment_request or list_payment_requests.
- `add_admin_fee` (`string`, optional): If set to true, the admin fee will be included in total. One of: `true`, `false`.
- `address` (`object`, optional): Postal address as an object. Example: {"line1": "1 Raffles Place", "city": "Singapore", "state": "Singapore", "country": "SG", "postal_code": "048616"}. Required keys inside the object are line1, city, state, country, and postal_code for payment requests; customers use street, city, state, and postal_code.
- `allow_repeated_payments` (`string`, optional): If set to true, multiple payments can be paid on a payment request link. Default value is false. One of: `true`, `false`.
- `amount` (`number`, optional): It's required field. Amount related to the payment.
- `email` (`string`, optional): Buyer’s email. Example: jane@example.com.
- `expires_after` (`string`, optional): E.g "30 mins" Other supported keys are "mins", "hours", "days". Example: 30 mins.
- `expiry_date` (`string`, optional): Time after which the payment link will be expired(time in SG with YYYY-MM-DD HH:mm:ss format). Applicable for repeated payments. Default is Null. Example: 2026-12-31 23:59:59.
- `generate_qr` (`boolean`, optional): Only valid for payment methods: paynow_online, qrph_netbank, doku_qris and shopee_pay if generate_qr was true.
- `name` (`string`, optional): Buyer’s name. Example: Jane Tan.
- `payment_methods` (`array`, optional): Payment method type (paynow_online , card, wechat, alipay, grabpay_direct, grabpay_paylater, shopee_pay, zip, fpx). If we don't pass, use the available methods.
- `phone` (`string`, optional): Buyer’s phone number. Example: +6591234567.
- `purpose` (`string`, optional): Purpose of the Payment request. Example: Order 123.
- `redirect_url` (`string`, optional): URL where we redirect the user after a payment. Query arguments reference (payment request id) and status are sent along. Example: https://yourshop.example.com/order/123/complete.
- `reference_number` (`string`, optional): Arbitrary reference number that you can map to your internal reference number. This value cannot be edited by the customer. Example: ORDER-1001.
- `send_email` (`string`, optional): It's "true" or "false". If set to true, an email receipt will be sent to the customer after the payment is completed. Default is false. One of: `true`, `false`.
- `send_sms` (`string`, optional): It's "true" or "false". If set to "true", SMS will be sent to the customer after the payment is completed. Default is false. One of: `true`, `false`.
- `staff_id` (`string`, optional): It's active staff id from the dashboard. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `webhook` (`string`, optional): URL where our server do POST request after a payment If done. Example: https://yourshop.example.com/hitpay/webhook.

Example input: `{"currency":"<currency>","request_id":"<request_id>"}`

### `hitpay_update_recurring_billing`

Update Recurring Billing · Write

Update a recurring billing subscription's plan, amount, cycle, or customer details.
Returns the updated recurring billing record.
Use this to change a subscription. Use delete_recurring_billing to cancel it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `recurring_billing_id` (`string`, required): ID of the recurring billing record. Get it from list_recurring_billings or create_recurring_billing.
- `amount` (`number`, optional): New amount to bill each cycle in the record currency. Example: 25.
- `customer_email` (`string`, optional): Customer's email. Example: jane@example.com.
- `customer_name` (`string`, optional): Customer's name. Example: Jane Tan.
- `cycle` (`string`, optional): Billing frequency (weekly / monthly / yearly / custom). One of: `weekly`, `monthly`, `yearly`, `custom`.
- `cycle_frequency` (`string`, optional): It is required field when the cycle is custom. For cycle = custom, set the frequency for cycle repeat field options [day, week, month, year]. One of: `day`, `week`, `month`, `year`.
- `cycle_repeat` (`integer`, optional): It is required field when cycle is custom. New cycle will only be affective at the end of the current cycle.
- `description` (`string`, optional): The description of subscription plan. Example: Monthly premium membership.
- `name` (`string`, optional): Plan name. Example: Premium membership.
- `payment_methods` (`array`, optional): Payment methods allowed for the subscription, as an array containing card, giro, or shopee_recurring. Example: ["card"].
- `plan_id` (`string`, optional): The plan ID, if plan_id is not null it will update [cycle, cycle_repeat, cycle_frequency and amount] with the values from Subscription plan. if plan_id is null you can update each field individually. When save_card is true, you disallow to set plan_id. Example: 9a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d.
- `redirect_url` (`string`, optional): URL where HitPay redirects the user after the users enters the card details and the subscription is active. Query arguments reference (subscription id) and status are sent along. Example: https://yourshop.example.com/order/123/complete.
- `reference` (`string`, optional): Arbitrary reference number that you can map to your internal reference number. This value cannot be edited by the customer. Example: ORDER-1001.
- `save_card` (`string`, optional): Only set the value “true” if you wish to save the card and charge the customer later on. More details in “Save Card” section. One of: `true`, `false`.
- `save_payment_method` (`string`, optional): It's new field that will replace save_card field in the future. Only set the value “true” if you wish to save the payment method and charge the customer later on. More details in “Save Payment Method” section. One of: `true`, `false`.
- `send_email` (`string`, optional): Whether HitPay emails the customer about this subscription. Use true or false. Example: true. One of: `true`, `false`.
- `start_date` (`string`, optional): The start date must be a date after or equal to today and Billing start date (YYYY-MM-DD) in SGT, only possible to change start date for recurring billing ID with status = scheduled or active. Example: 2026-02-01.
- `start_date_method` (`string`, optional): It's an optional field and only applicable when save_payment_method is true. By default, the start_date_method is null. Options are sign_up_date or no_initial_charge. One of: `sign_up_date`, `no_initial_charge`.

Example input: `{"recurring_billing_id":"<recurring_billing_id>"}`

### `hitpay_update_subscription_plan`

Update Subscription Plan · Write

Update a subscription plan's name, amount, cycle, or other settings.
Returns the updated plan.
Use this to change a plan. Use create_subscription_plan for a new plan.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `amount` (`integer`, required): Amount to bill, as a whole number, in the plan or record currency. Maximum 999999.99. Example: 25.
- `cycle` (`string`, required): Billing frequency (weekly / monthly / yearly / custom / save_card). If cycle = custom then the user has to send the fields cycle_repeat and cycle_frequency. One of: `weekly`, `monthly`, `yearly`, `custom`, `save_card`.
- `name` (`string`, required): Plan name. It's required field. Example: Premium membership.
- `plan_id` (`string`, required): ID of the subscription plan. Get it from list_subscription_plans or create_subscription_plan.
- `currency` (`string`, optional): Three-letter currency code for the amount. Example: SGD.
- `cycle_frequency` (`string`, optional): [This field is only applicable when cycle = custom] It's the frequency of the cycle [day / week / month / year]. One of: `day`, `week`, `month`, `year`.
- `cycle_repeat` (`integer`, optional): [This field is only applicable when cycle = custom] It's the number of times the cycle will repeat.
- `description` (`string`, optional): The description of subscription plan. Example: Monthly premium membership.
- `fixed_date` (`number`, optional): it's required if start_date_method = fixed_date.
- `redirect_url` (`string`, optional): The redirected URL after the payment. Example: https://yourshop.example.com/order/123/complete.
- `reference` (`string`, optional): Arbitrary reference number that you can map to your internal reference number. This value cannot be edited by the customer. Example: ORDER-1001.
- `start_date_method` (`string`, optional): How the billing start date is chosen. Valid values depend on the endpoint; see the allowed options. Example: sign_up_date. One of: `sign_up_date`, `customer_select_date`, `fixed_date`.
- `times_to_be_charged` (`number`, optional): How many times the customer is charged before the subscription ends. Leave empty to charge until cancelled. Example: 12.

Example input: `{"amount":25,"cycle":"weekly","name":"<name>","plan_id":"<plan_id>"}`

### `hitpay_delete_customer`

Delete Customer · Destructive

Delete a saved customer.
Returns only the HTTP status; the response body is empty.
Use this to remove a customer permanently. Use update_customer to edit instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `customer_id` (`string`, required): ID of the customer. Get it from list_customers or create_customer.

Example input: `{"customer_id":"<customer_id>"}`

### `hitpay_delete_invoice`

Delete Invoice · Destructive

Delete an invoice.
Returns only the HTTP status; the response body is empty.
Use this to remove an invoice permanently. Use update_invoice to correct it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): ID of the invoice. Get it from list_invoices.

Example input: `{"invoice_id":"<invoice_id>"}`

### `hitpay_delete_order`

Delete Order · Destructive

Delete an order.
Returns only the HTTP status; the response body is empty.
Use this to remove an order permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `order_id` (`string`, required): ID of the order. Get it from list_orders or create_order.

Example input: `{"order_id":"<order_id>"}`

### `hitpay_delete_payment_request`

Delete Payment Request · Destructive

Delete a payment request so its checkout link can no longer be paid.
Returns a success flag. Completed payment requests cannot be deleted.
Use this to withdraw an unpaid request. Use update_payment_request to change it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `request_id` (`string`, required): ID of the payment request. Get it from create_payment_request or list_payment_requests.

Example input: `{"request_id":"<request_id>"}`

### `hitpay_delete_product`

Delete Product · Destructive

Delete a product from the catalog.
Returns only the HTTP status; the response body is empty.
Use this to remove a product permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `product_id` (`string`, required): ID of the product. Get it from list_products.

Example input: `{"product_id":"<product_id>"}`

### `hitpay_delete_recurring_billing`

Delete Recurring Billing · Destructive

Cancel and delete a recurring billing subscription.
Returns the deleted recurring billing record.
Use this to stop future charges. Use update_recurring_billing to change it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `recurring_billing_id` (`string`, required): ID of the recurring billing record. Get it from list_recurring_billings or create_recurring_billing.

Example input: `{"recurring_billing_id":"<recurring_billing_id>"}`

### `hitpay_delete_subscription_plan`

Delete Subscription Plan · Destructive

Delete a subscription plan.
Returns only the HTTP status; the response body is empty.
Use this to remove a plan permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `plan_id` (`string`, required): ID of the subscription plan. Get it from list_subscription_plans or create_subscription_plan.

Example input: `{"plan_id":"<plan_id>"}`

## Related

Other Accounting & Finance connectors ([all 37](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
