REST API for campaigns and data, IMAP sync for replies, separate SMTP Access, and setup guides for popular SMTP providers.
Three ways to interact with the platform. Choose whichever suits your task best.
Push model. Create campaigns, import subscribers, read statistics. JSON-only, Bearer-token authorization.
Go to documentation →Add addresses to an existing list or create a new one. Invalid and unsubscribed addresses are skipped.
API Example →Connect IMAP to each SMTP. Bulko retrieves responses every 5 minutes and classifies them using AI. Nothing needs to be done manually.
IMAP configuration →Minimal example: creating a campaign and starting the send. Input — a list of emails and a template. Output — campaign_id and the statistics dashboard URL.
# Launch a campaign curl -X POST 'https://bulko.io/api/v1/campaigns/launch' \ -H 'Authorization: Bearer YOUR_API_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "name": "Q2 Outreach", "subject": "{Hi|Hello} {{name}}", "body": "<p>Hi {{name}}, ...</p>", "subscriber_list_id": 42, "ai_rotation": true }'
import requests resp = requests.post( "https://bulko.io/api/v1/campaigns/launch", headers={"Authorization": f"Bearer {API_TOKEN}"}, json={ "name": "Q2 Outreach", "subject": "{Hi|Hello} {{name}}", "body": "<p>Hi {{name}}, ...</p>", "subscriber_list_id": 42, "ai_rotation": True, }, ) campaign = resp.json() print("Campaign", campaign["id"], "started")
const resp = await fetch( 'https://bulko.io/api/v1/campaigns/launch', { method: 'POST', headers: { 'Authorization': `Bearer ${API_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ name: 'Q2 Outreach', subject: '{Hi|Hello} {{name}}', body: '<p>Hi ...</p>', subscriber_list_id: 42, ai_rotation: true, }), } ); const campaign = await resp.json(); console.log('Campaign', campaign.id, 'started');
$ch = curl_init('https://bulko.io/api/v1/campaigns/launch'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $API_TOKEN, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'name' => 'Q2 Outreach', 'subject' => '{Hi|Hello} {{name}}', 'body' => '<p>Hi ...</p>', 'subscriber_list_id' => 42, 'ai_rotation' => true, ]), ]); $campaign = json_decode(curl_exec($ch), true);
/api/v1/campaigns/launchCreate and launch a campaign/api/v1/campaigns/{id}/statsCampaign statistics/api/v1/subscribers/importImport Addresses (JSON)/api/v1/replies/?status=positiveReply list with filters/api/v1/smtp/accessesSMTP Access Limits/api/v1/account/balanceEmail and AI creditsThe API token is generated in your profile settings. Rate limit: 60 requests/min per token.
Outbound webhooks are not currently available in production. The events below are planned after the REST API is stabilized. For current automation, poll the statistics and replies endpoints.
The email was successfully accepted by the recipient's SMTP server. Contains campaign_id, recipient, smtp_used, timestamp.
The recipient opened the email. Unique opens (one event per address).
Click on a link. Contains url, recipient, and campaign_id.
A reply was received. Contains body, AI classification (positive/negative/question), confidence.
Bounce. Contains SMTP error code (550, 553, 421...) and raw bounce-reason.
The recipient clicked the unsubscribe link. The email is added to the global suppression list.
// Planned "replied" payload — not yet a production API { "event": "replied", "campaign_id": 142, "recipient": "[email protected]", "reply": { "subject": "Re: Quick question", "body": "Sounds great, when can we talk?", "received_at": "2026-05-09T14:32:11Z", "ai_classification": "positive", "ai_confidence": 0.94 }, "timestamp": "2026-05-09T14:32:14Z" }
Optimal payment methods for each region. All providers process payments on their end; Bulko does not store card details.
Visa / Mastercard / Apple Pay / Google Pay. All international cards.
BTC / ETH / USDT / USDC and 70+ other cryptocurrencies. Lightning supported.
Crypto payments with extended stablecoin support. Lower fees than CoinGate.
Russian cards, SBP QR. The fastest method for users in Russia.
You can call the REST API through a generic HTTP Request/Webhooks action. Bulko does not yet have listed apps in these service directories.
Use Webhooks by Zapier to POST to the address import and campaign launch endpoints.
The HTTP Request node gives full control over the JSON body and can periodically retrieve statistics and replies.
Connect your CRM to the REST API through its built-in HTTP actions or an intermediate Zapier/n8n workflow. This is not a native integration.
Describe your task — we'll help you choose the best approach. SDK examples for Python and Node.js on request.
[email protected]