Sir Chargly SDK Reference
Complete reference for the @sirchargly/sdk package.
Installation
npm install @sirchargly/sdk
# or
yarn add @sirchargly/sdk
Quick Start
import SirChargly from '@sirchargly/sdk';
const client = new SirChargly('sk_dev_sirchargly_your_api_key');
// Create a fee estimate
const estimate = await client.estimates.create({
amount: 10000,
currency: 'USD',
region: 'US-CA'
});
Client Initialization
`new SirChargly(apiKey, config?)`
Creates a new Sir Chargly client instance.
Parameters:
apiKey (string, required): Your Sir Chargly API keyconfig (object, optional): - baseUrl (string): Custom API base URL (default: https://api.sirchargly.com)
- timeout (number): Request timeout in milliseconds (default: 30000)
- apiVersion (string): API version (default: '2025-01')
Example:
const client = new SirChargly('sk_dev_sirchargly_your_api_key', {
timeout: 60000,
apiVersion: '2025-01'
});
Estimates Resource
Calculate convenience fee estimates before creating charges.
`client.estimates.create(params)`
Calculate a convenience fee estimate.
Parameters:
amount (number, required): Amount in cents (e.g., 10000 for $100.00)currency (string, required): Three-letter ISO currency code (e.g., 'USD')region (string, optional): Region code for compliance checking (e.g., 'US-CA')cardType ('credit' | 'debit', optional): Card type for accurate calculationReturns: Promise<Estimate>
Example:
const estimate = await client.estimates.create({
amount: 10000,
currency: 'USD',
region: 'US-CA',
cardType: 'credit'
});
console.log(`Base: $${estimate.baseAmount / 100}`);
console.log(`Fee: $${estimate.convenienceFee / 100}`);
console.log(`Total: $${estimate.totalAmount / 100}`);
console.log(`Compliant: ${estimate.compliant}`);
Response:
{
baseAmount: 10000,
convenienceFee: 320,
totalAmount: 10320,
feeBreakdown: {
percentage: 2.9,
flatFee: 0.30
},
compliant: true,
region: 'US-CA'
}
Charges Resource
Create and manage payment charges with convenience fees.
`client.charges.create(params)`
Create a new charge with convenience fee.
Parameters:
amount (number, required): Amount in centscurrency (string, required): Three-letter ISO currency codecustomer (string, optional): Customer identifierdescription (string, optional): Description for this chargemetadata (object, optional): Key-value pairs for additional informationregion (string, optional): Region codecardType ('credit' | 'debit', optional): Card typeReturns: Promise<Charge>
Example:
const charge = await client.charges.create({
amount: 10000,
currency: 'USD',
customer: 'cust_123',
description: 'Order #1234',
metadata: {
orderId: '1234',
productIds: ['prod_abc', 'prod_xyz']
}
});
console.log(`Charge ID: ${charge.id}`);
console.log(`Status: ${charge.status}`);
console.log(`Total: $${charge.totalAmount / 100}`);
Response:
{
id: 'ch_123456',
object: 'charge',
amount: 10000,
convenienceFee: 320,
totalAmount: 10320,
currency: 'USD',
status: 'succeeded',
created: 1704067200,
customer: 'cust_123',
description: 'Order #1234',
metadata: { orderId: '1234' }
}
`client.charges.retrieve(id)`
Retrieve a charge by ID.
Parameters:
id (string, required): Charge IDReturns: Promise<Charge>
Example:
const charge = await client.charges.retrieve('ch_123456');
console.log(`Status: ${charge.status}`);
console.log(`Amount: $${charge.amount / 100}`);
`client.charges.list(params?)`
List all charges with pagination and filtering.
Parameters:
limit (number, optional): Max results to return (1-100, default: 10)starting_after (string, optional): Cursor for pagination (charge ID)created (object, optional): Filter by creation timestamp - gte (number): Return charges created on or after this timestamp
- lte (number): Return charges created on or before this timestamp
Returns: Promise<List<Charge>>
Example:
// Get 10 most recent charges
const charges = await client.charges.list({ limit: 10 });
// Get charges from last 30 days
const recentCharges = await client.charges.list({
limit: 25,
created: {
gte: Math.floor(Date.now() / 1000) - 30 * 24 * 60 * 60
}
});
// Paginate through charges
const nextPage = await client.charges.list({
limit: 10,
starting_after: charges.data[charges.data.length - 1].id
});
Response:
{
object: 'list',
url: '/v1/charges',
data: [
{ id: 'ch_1', amount: 10000, ... },
{ id: 'ch_2', amount: 5000, ... }
],
has_more: false
}
Fee Configs Resource
Manage convenience fee configuration settings.
`client.feeConfigs.retrieve()`
Get current fee configuration.
Returns: Promise<FeeConfig>
Example:
const config = await client.feeConfigs.retrieve();
console.log(`Percentage: ${config.percentage}%`);
console.log(`Flat Fee: $${config.flatFee}`);
console.log(`Billing Mode: ${config.billingMode}`);
Response:
{
percentage: 2.9,
flatFee: 0.30,
billingMode: 'direct',
regions: { ... }
}
`client.feeConfigs.update(params)`
Update fee configuration.
Parameters:
percentage (number, optional): Fee percentage (e.g., 2.9 for 2.9%)flatFee (number, optional): Flat fee in dollars (e.g., 0.30 for $0.30)billingMode ('direct' | 'separate', optional): Billing modeReturns: Promise<FeeConfig>
Example:
const newConfig = await client.feeConfigs.update({
percentage: 3.0,
flatFee: 0.35,
billingMode: 'separate'
});
console.log('Updated successfully');
Regions Resource
Check regional compliance requirements and regulations.
`client.regions.retrieve(regionCode)`
Get region information.
Parameters:
regionCode (string, required): Region code (e.g., 'US-CA', 'US-NY', 'GB')Returns: Promise<Region>
Example:
const region = await client.regions.retrieve('US-CA');
console.log(`Region: ${region.state || region.country}`);
console.log(`Max Percentage: ${region.maxPercentage}%`);
console.log(`Max Flat Fee: $${region.maxFlatFee}`);
console.log(`Requires Disclosure: ${region.requiresDisclosure}`);
console.log(`Allowed Cards: ${region.allowedCardTypes.join(', ')}`);
Response:
{
regionCode: 'US-CA',
country: 'US',
state: 'California',
allowedCardTypes: ['credit', 'debit'],
maxPercentage: 4.0,
maxFlatFee: 1.0,
requiresDisclosure: true,
disclosureText: 'A convenience fee will be added...'
}
`client.regions.checkCompliance(params)`
Check if a fee structure is compliant.
Parameters:
region (string, required): Region codepercentage (number, required): Fee percentage to checkflatFee (number, required): Flat fee to checkcardType ('credit' | 'debit', required): Card typeReturns: Promise<ComplianceCheck>
Example:
const compliance = await client.regions.checkCompliance({
region: 'US-CA',
percentage: 3.5,
flatFee: 0.30,
cardType: 'credit'
});
if (compliance.compliant) {
console.log('Fee structure is compliant');
} else {
console.log(`Not compliant: ${compliance.reason}`);
}
Response:
{
compliant: true
}
// or
{
compliant: false,
reason: 'Percentage exceeds maximum allowed (4.0%) for US-CA'
}
Webhooks
Verify webhook signatures to ensure events are from Sir Chargly.
`SirChargly.webhooks.constructEvent(body, signature, secret)`
Verify and parse a webhook event.
Parameters:
body (string, required): Raw request body (do not parse JSON first)signature (string, required): Value from 'Sir-Chargly-Signature' headersecret (string, required): Your webhook signing secretReturns: WebhookEvent
Throws: InvalidRequestError if signature is invalid
Example:
import { SirChargly } from '@sirchargly/sdk';
// In your webhook handler (Express)
app.post('/webhooks/sirchargly',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['sir-chargly-signature'];
const body = req.body.toString();
try {
const event = SirChargly.webhooks.constructEvent(
body,
signature,
process.env.SIRCHARGLEY_WEBHOOK_SECRET
);
// Handle the event
switch (event.type) {
case 'charge.succeeded':
console.log('Charge succeeded:', event.data.object.id);
break;
case 'charge.failed':
console.log('Charge failed:', event.data.object.id);
break;
}
res.json({ received: true });
} catch (err) {
console.error('Webhook verification failed:', err.message);
res.status(400).send('Invalid signature');
}
}
);
Error Handling
The SDK throws typed errors for different scenarios.
Error Types
AuthenticationError: Invalid API key (401)InvalidRequestError: Invalid parameters (400)RateLimitError: Too many requests (429)APIError: Server errors (5xx)NetworkError: Network/timeout errorsExample
import {
SirChargly,
AuthenticationError,
InvalidRequestError,
RateLimitError,
APIError,
NetworkError
} from '@sirchargly/sdk';
try {
const charge = await client.charges.create({
amount: 10000,
currency: 'USD'
});
} catch (error) {
if (error instanceof AuthenticationError) {
console.error('Invalid API key');
} else if (error instanceof InvalidRequestError) {
console.error('Invalid parameters:', error.message);
console.error('Parameter:', error.param);
} else if (error instanceof RateLimitError) {
console.error('Too many requests, please retry later');
} else if (error instanceof NetworkError) {
console.error('Network error:', error.message);
} else if (error instanceof APIError) {
console.error('API error:', error.message);
console.error('Status code:', error.statusCode);
}
}
Error Properties
All errors extend SirCharglyError and include:
message (string): Error messagetype (string): Error type identifiercode (string): Error codestatusCode (number): HTTP status code (if applicable)TypeScript Support
The SDK is written in TypeScript with complete type definitions.
import SirChargly, {
Estimate,
Charge,
FeeConfig,
Region,
ComplianceCheck,
WebhookEvent
} from '@sirchargly/sdk';
const client = new SirChargly('sk_dev_sirchargly_your_api_key');
// Full type inference
const estimate: Estimate = await client.estimates.create({
amount: 10000,
currency: 'USD'
});