1. Payouts
  • Jokoor API Documentation
  • Getting started
    • Authentication
    • Pagination
    • Quick Start
    • Error Handling
    • Response Format
  • Payments
    • Payment Links
    • Checkouts
    • Payment Status
  • SMS
    • SMS Templates
    • Resending SMS Messages
    • Message Segments
    • SMS Contact Groups
    • SMS Contacts
    • SMS Campaigns
    • Sending SMS Messages
  • Billing
    • Invoices
    • Invoice Payments (Offline/Manual Recording)
    • Receipts
    • Subscriptions
  • Resources
    • Donations
    • Customers
    • Products
    • Transactions
    • Refunds
  • Payouts
    • Payout Requests
    • Bank Accounts
    • Recipient Payouts
    • Payout Recipients
    • Payout Reversals
    • Payout Balance
    • Bulk Payout Operations
    • Payout Deposits
  • Webhooks
    • Webhook Events
    • Webhook Endpoints
  • APIs
    • Health
      • Health check
    • SMS
      • Send SMS message
      • List SMS messages
      • Get SMS message details
      • Send a draft SMS message
      • Resend failed SMS
      • Batch resend failed messages
    • SMS Templates
      • Create SMS template
      • List SMS templates
      • Get SMS template
      • Update SMS template
      • Delete SMS template
    • SMS Contacts
      • Create contact
      • List contacts
      • Get contact
      • Update contact
      • Delete contact
    • SMS Contact Groups
      • Create contact group
      • List contact groups
      • Get contact group
      • Update contact group
      • Delete contact group
      • Add contacts to group
      • Remove contacts from group
    • SMS Campaigns
      • Create SMS campaign
      • List SMS campaigns
      • Get SMS campaign
      • Update SMS campaign
      • Delete SMS campaign
      • Send SMS campaign
      • Send draft SMS campaign
      • Send campaign asynchronously
      • Get campaign messages
      • Get campaign statistics
      • Resend failed campaign messages
    • SMS Analytics
      • Get segment analytics
      • Preview message segments
    • Checkouts
      • Create checkout session
      • Get checkout session
      • Cancel checkout
    • Payment Links
      • Create payment link
      • List payment links
      • Get payment link
      • Update payment link
      • Delete payment link
    • Invoices
      • Create invoice
      • List invoices
      • Get invoice
      • Update invoice
      • Cancel invoice
      • Finalize draft invoice
      • Send invoice via email
      • Download invoice PDF
      • Record invoice payment
      • List invoice payments
      • Get invoice receipts
    • Receipts
      • List receipts
      • Get receipt by ID
      • Get receipt by number
      • Download receipt PDF
    • Transactions
      • List transactions
      • Get transaction
    • Refunds
      • Refund transaction
      • List refunds
      • Get refund
    • Customers
      • Create or retrieve customer
      • List customers
      • Get customer
      • Update customer
      • Delete customer
    • Products
      • Create product
      • List products
      • Get product
      • Update product
      • Delete product
    • Donations
      • Create donation campaign
      • List donation campaigns
      • Get donation campaign
      • Update donation campaign
      • Delete donation campaign
    • Subscriptions
      • Create subscription
      • List subscriptions
      • Get subscription
      • Update subscription
      • Cancel subscription
      • List subscription invoices
      • Trigger subscription processing
    • Payouts
      • Get payout balance
      • List bank accounts
      • Create payout request
      • List payout requests
      • Get payout request
      • Cancel payout request
      • List deposit transactions
      • Get deposit transaction
    • Payout Recipients
      • Create payout recipient
      • List payout recipients
      • Get payout recipient
      • Update payout recipient
      • Delete payout recipient
      • Send payout to recipient
      • List recipient payouts
      • Get recipient payout
      • Reverse or cancel recipient payout
      • Send bulk payouts to recipients
      • Get bulk payout batch status
      • Upload CSV for bulk payouts
      • Process uploaded CSV bulk payouts
      • Send bulk payouts by recipient type
    • Webhooks
      • Create webhook endpoint
      • List webhook endpoints
      • Get webhook endpoint
      • Update webhook endpoint
      • Delete webhook endpoint
      • Test webhook endpoint
    • Webhook Events
      • List webhook events
      • Get webhook event
      • Retry webhook event
  • Schemas
    • Schemas
    • ErrorResponse
    • HealthResponse
    • SendSMSRequest
    • SMSMessageResponse
    • SMSMessageListResponse
    • BatchResendResponse
    • SMSDashboardResponse
    • SMSPlansListResponse
    • CreateSMSTemplateRequest
    • UpdateSMSTemplateRequest
    • SMSTemplateResponse
    • SMSTemplateListResponse
    • CreateSMSContactRequest
    • UpdateSMSContactRequest
    • SMSContactResponse
    • SMSContactListResponse
    • CreateSMSContactGroupRequest
    • UpdateSMSContactGroupRequest
    • SMSContactGroupResponse
    • SMSContactGroupListResponse
    • CreateSenderIDRequest
    • UpdateSenderIDRequest
    • SenderIDResponse
    • SenderIDListResponse
    • CreateSMSCampaignRequest
    • UpdateSMSCampaignRequest
    • SMSCampaignResponse
    • SMSCampaignListResponse
    • CreateCheckoutRequest
    • CheckoutResponse
    • InitializePaymentRequest
    • InitializePaymentResponse
    • PaymentStatusResponse
    • PaymentSessionResponse
    • CreatePaymentLinkRequest
    • UpdatePaymentLinkRequest
    • PaymentLinkResponse
    • PaymentLinkListResponse
    • CreateInvoiceRequest
    • UpdateInvoiceRequest
    • RecordInvoicePaymentRequest
    • InvoiceResponse
    • InvoiceListResponse
    • InvoicePaymentListResponse
    • InvoiceReceiptInfo
    • Receipt
    • ListReceiptsResponse
    • CreateSubscriptionRequest
    • SubscriptionResponse
    • SubscriptionListResponse
    • UpdateSubscriptionRequest
    • TransactionResponse
    • TransactionListResponse
    • RefundResponse
    • RefundListResponse
    • CreateCustomerRequest
    • UpdateCustomerRequest
    • CustomerResponse
    • CustomerListResponse
    • CreateProductRequest
    • UpdateProductRequest
    • ProductResponse
    • ProductListResponse
    • CreateDonationCampaignRequest
    • UpdateDonationCampaignRequest
    • DonationCampaignResponse
    • DonationCampaignListResponse
    • PayoutBalanceResponse
    • CreateBankAccountRequest
    • BankAccountResponse
    • CreatePayoutRequest
    • PayoutRequestResponse
    • PayoutRequestListResponse
    • CreatePayoutRecipientRequest
    • UpdatePayoutRecipientRequest
    • PayoutRecipientResponse
    • PayoutRecipientListResponse
    • SendRecipientPayoutRequest
    • RecipientPayoutResponse
    • RecipientPayoutListResponse
    • CreateWebhookEndpointRequest
    • DepositTransactionResponse
    • UpdateWebhookEndpointRequest
    • DepositTransactionListResponse
    • WebhookEndpointResponse
    • BulkRecipientPayoutRequest
    • WebhookEndpointListResponse
    • ProcessCSVPayoutRequest
    • WebhookEventResponse
    • BulkPayoutByTypeRequest
    • WebhookEventListResponse
    • BulkPayoutBatchResponse
    • CSVUploadResponse
  1. Payouts

Bulk Payout Operations

Send money to multiple recipients in a single batch operation via Wave B2P. Process up to 100 recipients per batch with a minimum amount of 100 GMD per recipient.
INFO
For API key requests, no OTP is required. For session-based requests (web dashboard), you must complete the OTP flow first.

Send Bulk Payouts#

Send money to multiple recipients in a single batch operation.
Endpoint: POST /v1/payouts/recipients/send-bulk
Authentication: Required
Request Body:
FieldTypeRequiredDescription
payoutsarrayYesArray of payout items (max 100)
payouts[].recipient_idstringYesID of the recipient
payouts[].amountstringYesAmount to send (minimum 100 GMD)
payouts[].descriptionstringNoOptional payment description
Example:
HTTP
TypeScript
Python
Success Response (201 Created):
{
  "data": {
    "id": "batch_abc123",
    "organization_id": "org_xyz789",
    "total_amount": "2250.00",
    "total_count": 3,
    "successful_count": 0,
    "failed_count": 0,
    "pending_count": 3,
    "status": "pending",
    "payouts": [
      {
        "id": "rp_001",
        "recipient_id": "rec_abc123",
        "amount": "500.00",
        "status": "pending",
        "error_message": null
      },
      {
        "id": "rp_002",
        "recipient_id": "rec_def456",
        "amount": "750.00",
        "status": "pending",
        "error_message": null
      },
      {
        "id": "rp_003",
        "recipient_id": "rec_ghi789",
        "amount": "1000.00",
        "status": "pending",
        "error_message": null
      }
    ],
    "created_at": "2024-01-15T10:00:00Z",
    "completed_at": null
  }
}
Error (400 Bad Request):
{
  "error": "Insufficient balance. Available: 1500.00 GMD, Required: 2250.00 GMD"
}
{
  "error": "Invalid amount for recipient rec_abc123. Minimum: 100 GMD"
}
{
  "error": "Recipient rec_def456 is inactive"
}
Error (401 Unauthorized):
{
  "error": "Invalid API key"
}

Get Bulk Payout Batch#

Retrieve the status and details of a bulk payout batch, including individual payout statuses.
Endpoint: GET /v1/payouts/recipients/batches/{id}
Authentication: Required
URL Parameters:
NameTypeRequiredDescription
idstringYesBatch ID
Example:
HTTP
TypeScript
Python
Success Response (200 OK):
{
  "data": {
    "id": "batch_abc123",
    "organization_id": "org_xyz789",
    "total_amount": "2250.00",
    "total_count": 3,
    "successful_count": 2,
    "failed_count": 1,
    "pending_count": 0,
    "status": "partially_completed",
    "payouts": [
      {
        "id": "rp_001",
        "recipient_id": "rec_abc123",
        "amount": "500.00",
        "status": "completed",
        "error_message": null
      },
      {
        "id": "rp_002",
        "recipient_id": "rec_def456",
        "amount": "750.00",
        "status": "completed",
        "error_message": null
      },
      {
        "id": "rp_003",
        "recipient_id": "rec_ghi789",
        "amount": "1000.00",
        "status": "failed",
        "error_message": "Recipient phone number invalid"
      }
    ],
    "created_at": "2024-01-15T10:00:00Z",
    "completed_at": "2024-01-15T10:05:30Z"
  }
}
Error (404 Not Found):
{
  "error": "Batch not found"
}
Error (401 Unauthorized):
{
  "error": "Invalid API key"
}

Batch Status Values#

StatusDescription
pendingBatch created, waiting to process
processingCurrently processing payouts
completedAll payouts completed successfully
partially_completedSome payouts succeeded, some failed
failedAll payouts failed

Upload CSV for Bulk Payouts#

Upload a CSV file containing recipient payout data. The file will be validated and stored for processing.
INFO
CSV Format Requirements:
Maximum file size: 5MB
Maximum 1000 rows
Required columns: recipient_id, amount
Optional column: description
Endpoint: POST /v1/payouts/recipients/send-bulk/upload-csv
Authentication: Required
Request Body:
The request must use multipart/form-data encoding.
FieldTypeRequiredDescription
filebinaryYesCSV file containing payout data

CSV Format Example#

recipient_id,amount,description
rec_abc123,500.00,Monthly payment
rec_def456,750.00,Bonus payment
rec_ghi789,1000.00,Commission
rec_jkl012,500.00,Monthly payment
rec_mno345,250.00,Partial payment
Example:
HTTP
TypeScript
Python
Success Response (200 OK):
{
  "data": {
    "upload_id": "upload_xyz789",
    "rows_count": 45,
    "total_amount": "22500.00",
    "validation_errors": [],
    "expires_at": "2024-01-15T11:00:00Z"
  }
}
Success with Validation Errors (200 OK):
{
  "data": {
    "upload_id": "upload_xyz789",
    "rows_count": 43,
    "total_amount": "21500.00",
    "validation_errors": [
      {
        "row": 5,
        "field": "amount",
        "error": "Invalid amount format. Must be a decimal number"
      },
      {
        "row": 12,
        "field": "recipient_id",
        "error": "Recipient not found"
      }
    ],
    "expires_at": "2024-01-15T11:00:00Z"
  }
}
Error (400 Bad Request):
{
  "error": "File size exceeds 5MB limit"
}
{
  "error": "CSV exceeds maximum of 1000 rows"
}
{
  "error": "Invalid CSV format. Missing required column: recipient_id"
}
Error (401 Unauthorized):
{
  "error": "Invalid API key"
}

Process CSV Bulk Payouts#

Process a previously uploaded CSV file to create bulk payouts.
INFO
For API key requests, no OTP is required. For session-based requests (web dashboard), you must complete the OTP flow first.
Endpoint: POST /v1/payouts/recipients/send-bulk/csv
Authentication: Required
Request Body:
FieldTypeRequiredDescription
upload_idstringYesID returned from the CSV upload endpoint
Example:
HTTP
TypeScript
Python
Success Response (201 Created):
{
  "data": {
    "id": "batch_csv123",
    "organization_id": "org_xyz789",
    "total_amount": "22500.00",
    "total_count": 45,
    "successful_count": 0,
    "failed_count": 0,
    "pending_count": 45,
    "status": "pending",
    "payouts": [
      {
        "id": "rp_001",
        "recipient_id": "rec_abc123",
        "amount": "500.00",
        "status": "pending",
        "error_message": null
      }
    ],
    "created_at": "2024-01-15T10:30:00Z",
    "completed_at": null
  }
}
Error (400 Bad Request):
{
  "error": "Upload has expired. Please upload the CSV again"
}
{
  "error": "Insufficient balance. Available: 10000.00 GMD, Required: 22500.00 GMD"
}
Error (404 Not Found):
{
  "error": "Upload not found"
}
Error (401 Unauthorized):
{
  "error": "Invalid API key"
}

Send Bulk Payouts by Type#

Send the same amount to all recipients of a specific type (e.g., all employees, all vendors). Useful for monthly salary payments, bonuses, or uniform distributions.
INFO
For API key requests, no OTP is required. For session-based requests (web dashboard), you must complete the OTP flow first.
Endpoint: POST /v1/payouts/recipients/send-bulk/by-type
Authentication: Required
Request Body:
FieldTypeRequiredDescription
recipient_typestringYesType of recipients to send to (e.g., "employee", "vendor")
amount_per_recipientstringYesAmount to send to each recipient (minimum 100 GMD)
descriptionstringNoOptional payment description
Example:
HTTP
TypeScript
Python
Success Response (201 Created):
{
  "data": {
    "id": "batch_type123",
    "organization_id": "org_xyz789",
    "total_amount": "30000.00",
    "total_count": 30,
    "successful_count": 0,
    "failed_count": 0,
    "pending_count": 30,
    "status": "pending",
    "payouts": [
      {
        "id": "rp_001",
        "recipient_id": "rec_emp001",
        "amount": "1000.00",
        "status": "pending",
        "error_message": null
      },
      {
        "id": "rp_002",
        "recipient_id": "rec_emp002",
        "amount": "1000.00",
        "status": "pending",
        "error_message": null
      }
    ],
    "created_at": "2024-01-15T10:00:00Z",
    "completed_at": null
  }
}
Error (400 Bad Request):
{
  "error": "No active recipients found with type: contractor"
}
{
  "error": "Insufficient balance. Available: 15000.00 GMD, Required: 30000.00 GMD"
}
{
  "error": "Invalid amount. Minimum: 100 GMD"
}
Error (401 Unauthorized):
{
  "error": "Invalid API key"
}

Use Cases#

Monthly salary payments: Send uniform salary to all employees
Bonus distributions: Pay bonuses to all active vendors
Uniform distributions: Send the same amount to a specific category

Best Practices#

1. Check Balance Before Bulk Operations#

Always verify your payout balance before initiating bulk operations:
TypeScript
Python

2. Monitor Batch Status#

Poll the batch status endpoint to track progress:
TypeScript
Python

3. Handle Validation Errors in CSV Uploads#

Always check for validation errors after uploading a CSV:
TypeScript
Python

4. Retry Failed Payouts#

After a batch completes, identify and retry failed payouts:
TypeScript
Python

5. Use Appropriate Bulk Method#

Choose the right bulk payout method for your use case:
MethodUse CaseBest For
sendBulkPayoutsVariable amounts per recipientCustom payment amounts, mixed purposes
uploadBulkPayoutCSV + processBulkPayoutCSVLarge batches from spreadsheets100+ recipients, data from external systems
sendBulkPayoutsByTypeSame amount to all recipients of a typeUniform distributions, monthly salaries

Currency Information#

All payout operations use GMD (Gambian Dalasi) exclusively. The Jokoor platform does not support multi-currency operations.
Minimum payout amount: 100 GMD
All amounts must be formatted as decimal strings (e.g., "500.00")
No currency conversion is available

Support#

For questions or issues with payout operations:
Email: support@jokoor.com
Documentation: https://docs.jokoor.com
Status: https://status.jokoor.com
Modified at 2025-12-25 21:44:15
Previous
Payout Balance
Next
Payout Deposits
Built with