Skip to content

Billing Overview

YeboLink uses a credit-based billing system. Purchase credits to send messages across all channels.

How Credits Work

Credits are the currency used to pay for messages on YeboLink. Different message channels consume different amounts of credits:

ChannelCredits per Message/Unit
SMS1 credit per message (160 chars)
WhatsApp0.5 credits per message
Email0.1 credits per email
Voice2 credits per minute

SMS MESSAGE SPLITTING

Long SMS messages are automatically split into segments:

  • Standard SMS: 160 characters per segment
  • Unicode SMS (with emojis): 70 characters per segment
  • Each segment costs 1 credit

Credit Packages

YeboLink offers flexible credit packages to suit businesses of all sizes.

Endpoint

GET /api/v1/billing/packages

Request

bash
curl -X GET https://api.yebolink.com/api/v1/billing/packages
javascript
const response = await fetch('https://api.yebolink.com/api/v1/billing/packages');
const data = await response.json();

console.log('Available packages:', data.data.packages);
python
import requests

response = requests.get('https://api.yebolink.com/api/v1/billing/packages')
data = response.json()

for package in data['data']['packages']:
    print(f"{package['credits']} credits: ${package['price']}")
php
<?php
$response = file_get_contents('https://api.yebolink.com/api/v1/billing/packages');
$data = json_decode($response, true);

foreach ($data['data']['packages'] as $package) {
    echo $package['credits'] . " credits: $" . $package['price'] . "\n";
}
?>

Response

json
{
  "success": true,
  "data": {
    "packages": [
      {
        "credits": 100,
        "price": 10.00,
        "price_per_credit": 0.10
      },
      {
        "credits": 500,
        "price": 45.00,
        "price_per_credit": 0.09
      },
      {
        "credits": 1000,
        "price": 80.00,
        "price_per_credit": 0.08
      },
      {
        "credits": 5000,
        "price": 350.00,
        "price_per_credit": 0.07
      },
      {
        "credits": 10000,
        "price": 600.00,
        "price_per_credit": 0.06
      }
    ]
  }
}

VOLUME DISCOUNTS

Larger packages offer better value! The more credits you buy, the lower the per-credit cost.


Checking Your Balance

Your current credit balance is returned with every authenticated request and can be viewed in your dashboard.

Using the Account Endpoint

javascript
// Login returns your credit balance
const loginResponse = await fetch('https://api.yebolink.com/api/v1/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'john@company.com',
    password: 'SecurePass123!'
  })
});

const data = await loginResponse.json();
console.log('Credits balance:', data.data.workspace.credits_balance);

Transaction Types

Credits can be affected by several transaction types:

TypeDescriptionEffect on Balance
purchaseCredit package purchaseIncreases balance
usageMessage sentDecreases balance
refundFailed message refundIncreases balance
adjustmentManual adjustment by adminIncreases/decreases

Low Credit Alerts

INSUFFICIENT CREDITS

When your credit balance is insufficient for an operation, you'll receive a 402 Payment Required error:

json
{
  "success": false,
  "error": "Insufficient credits. You need 100 credits but have 50."
}

Handling Low Credits

javascript
async function sendMessageWithCreditCheck(messageData) {
  try {
    const response = await fetch('https://api.yebolink.com/api/v1/messages/send', {
      method: 'POST',
      headers: {
        'X-API-Key': process.env.YEBOLINK_API_KEY,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(messageData)
    });

    const data = await response.json();

    if (response.status === 402) {
      // Insufficient credits - redirect to purchase
      console.error('Insufficient credits:', data.error);
      window.location.href = '/billing/purchase';
      return;
    }

    return data;
  } catch (error) {
    console.error('Error sending message:', error);
  }
}

Credit Calculation Examples

SMS Examples

Single SMS (120 chars):
"Hello John, your appointment is confirmed for tomorrow at 10 AM. See you then!"
Credits: 1

Long SMS (250 chars - 2 segments):
"Hello John, your appointment is confirmed for tomorrow at 10 AM. Please arrive 10 minutes early to complete any necessary paperwork. If you need to reschedule, please call us at +1234567890. We look forward to seeing you!"
Credits: 2

SMS with Emojis (100 chars - 2 segments):
"🎉 Hi John! Your order #12345 has shipped! Track it here: https://tracking.com/12345 😊"
Credits: 2 (Unicode SMS uses 70 chars/segment)

WhatsApp Examples

Single WhatsApp message:
"Hi John, your package has been delivered!"
Credits: 0.5

WhatsApp with media:
Message + Image attachment
Credits: 0.5

Email Examples

Single email:
"Welcome to our newsletter!"
Credits: 0.1

Bulk email (100 recipients):
Same email to 100 people
Credits: 10 (0.1 × 100)

Bulk Campaign Example

Campaign: Send SMS to 1,000 customers

Message: "Hi {{name}}, special 20% off for you! Use code SAVE20"
Length: 56 characters (1 segment per message)

Calculation:
1,000 recipients × 1 credit = 1,000 credits

Cost (with 1,000 credit package):
1,000 credits × $0.08 = $80.00

Best Practices

1. Monitor Credit Usage

javascript
// Track credits used per campaign
async function sendCampaignWithTracking(recipients, message) {
  // Get initial balance
  const initialBalance = await getCurrentBalance();

  // Send messages
  const result = await sendBulkSMS({
    recipients,
    channel: 'sms',
    content: { text: message }
  });

  // Get new balance
  const newBalance = await getCurrentBalance();

  // Calculate usage
  const creditsUsed = initialBalance - newBalance;

  console.log(`Campaign sent to ${recipients.length} recipients`);
  console.log(`Credits used: ${creditsUsed}`);
  console.log(`Remaining balance: ${newBalance}`);

  return {
    sent: result.data.queued,
    creditsUsed,
    remainingBalance: newBalance
  };
}

2. Optimize Message Length

javascript
// Keep SMS under 160 characters to use only 1 credit
function optimizeSMS(message) {
  const limit = 160;

  if (message.length > limit) {
    console.warn(`⚠️  Message is ${message.length} chars (${Math.ceil(message.length / limit)} credits)`);
    console.log('Consider shortening to save credits');
  }

  return message;
}

// Example
const message = optimizeSMS('Your appointment is tomorrow at 10 AM');
// ✅ 41 chars - 1 credit

3. Set Up Low Credit Alerts

javascript
// Check balance before major campaigns
async function checkBalanceBeforeCampaign(recipientCount, creditsPerMessage = 1) {
  const balance = await getCurrentBalance();
  const required = recipientCount * creditsPerMessage;

  if (balance < required) {
    throw new Error(
      `Insufficient credits. Need ${required}, have ${balance}. ` +
      `Purchase ${required - balance} more credits.`
    );
  }

  return true;
}

// Usage
try {
  await checkBalanceBeforeCampaign(5000, 1); // 5000 SMS messages
  await sendBulkCampaign(...);
} catch (error) {
  console.error(error.message);
  // Redirect to purchase credits
}

4. Use the Right Channel

javascript
// Choose channel based on urgency and cost
function selectChannel(message, urgency) {
  const channels = {
    urgent: 'sms',      // 1 credit - instant delivery
    normal: 'whatsapp',  // 0.5 credits - good delivery rates
    low: 'email'        // 0.1 credits - cheapest option
  };

  return channels[urgency] || 'sms';
}

// Example
const channel = selectChannel('Your OTP is 123456', 'urgent');
// Returns 'sms' for urgent messages

Credit Expiration

NO EXPIRATION

YeboLink credits never expire! Purchase credits and use them at your own pace.


Refund Policy

Automatic Refunds

Credits are automatically refunded for:

  • Failed message deliveries
  • Invalid phone numbers (detected before sending)
  • Provider errors
json
{
  "type": "refund",
  "amount": 50,
  "description": "Refund for failed messages",
  "created_at": "2025-11-02T14:30:00Z"
}

Manual Refunds

For billing issues or disputes:

  1. Contact support@yebolink.app
  2. Provide transaction ID
  3. Explain the issue

Refunds are processed within 5-7 business days.


Enterprise Plans

Need custom pricing or billing?

Enterprise features:

  • Custom credit pricing
  • Dedicated account manager
  • Priority support
  • Custom SLAs
  • Volume discounts
  • Invoice billing

Contact: enterprise@yebolink.app


Next Steps

Need Help?

Built with VitePress