BulkMail API v2

Buy email accounts and other digital goods from your own code: read the catalogue and stock, place orders, and track your balance. Examples are real responses captured on 2026-10-11; the account holder's details and delivered account lines are replaced with samples, and long lists show their first 3 items.

Base URL

https://bulkmail.shop/api/v2

Authentication

Header X-API-Key: sk_live_…. Create keys on the API Keys page of your dashboard.

Envelope

{"success": true, "data": …} or {"success": false, "error": "…"}; 422 adds errors.

Formats

Dates ISO 8601 UTC. Money USD, up to 8 decimals. Ids are integers. Lists: page, per_page ≤ 100, meta.

curl "https://bulkmail.shop/api/v2/wallet/balance" \
  -H "X-API-Key: YOUR_API_KEY"

Account

Your profile, password and dashboard.

Get your profile

API key
GET/api/v2/user/profile

Your account details and current balance (USD).

Request

curl -X GET "https://bulkmail.shop/api/v2/user/profile" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "id": 1001,
    "name": "Demo User",
    "email": "[email protected]",
    "balance": 339.60453503,
    "status": "active",
    "email_verified_at": "2026-02-21T05:56:10.000000Z",
    "created_at": "2026-02-21T05:56:10.000000Z"
  }
}

Update your profile

API key
PUT/api/v2/user/profile

Change your name and/or email. Fields you leave out keep their current value.

Body application/json

FieldTypeRequiredDescription
namestringNew display name.
emailstringNew email; must not belong to another account.

Request

curl -X PUT "https://bulkmail.shop/api/v2/user/profile" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Demo User"}'

Responses

{
  "success": true,
  "message": "Profile updated successfully",
  "data": {
    "id": 1001,
    "name": "Demo User",
    "email": "[email protected]",
    "balance": 125.5,
    "status": "active",
    "email_verified_at": "2026-02-21T05:56:10.000000Z",
    "created_at": "2026-02-21T05:56:10.000000Z"
  }
}

Change your password

API key
POST/api/v2/user/password

Body application/json

FieldTypeRequiredDescription
current_passwordstringyes
new_passwordstringyesAt least 8 characters.
confirm_passwordstringyesMust equal new_password.

Request

curl -X POST "https://bulkmail.shop/api/v2/user/password" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"current_password": "old-password", "new_password": "new-password-123", "confirm_password": "new-password-123"}'

Responses

{
  "success": true,
  "message": "Password changed successfully"
}

Get your dashboard

API key
GET/api/v2/user/dashboard

Account, totals, and your 5 most recent orders and transactions.

Request

curl -X GET "https://bulkmail.shop/api/v2/user/dashboard" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "user": {
      "id": 1001,
      "name": "Demo User",
      "email": "[email protected]",
      "balance": 339.60453503,
      "status": "active",
      "created_at": "2026-02-21T05:56:10.000000Z"
    },
    "stats": {
      "total_orders": 3656,
      "total_spent": 560.39546497,
      "purchased_items": 14574
    },
    "recent_orders": [
      {
        "id": 1232875,
        "product_id": 13,
        "quantity": 2,
        "total_amount": 0.02394032,
        "status": "completed",
        "created_at": "2026-10-11T16:58:00.000000Z"
      },
      {
        "id": 1232770,
        "product_id": 13,
        "quantity": 1,
        "total_amount": 0.01197016,
        "status": "completed",
        "created_at": "2026-10-11T16:30:01.000000Z"
      },
      {
        "id": 1232374,
        "product_id": 970,
        "quantity": 1,
        "total_amount": 0.00455153,
        "status": "completed",
        "created_at": "2026-10-11T14:32:46.000000Z"
      }
    ],
    "recent_transactions": [
      {
        "id": 1247991,
        "type": "purchase",
        "amount": 0.02394032,
        "direction": "out",
        "signed_amount": -0.02394032,
        "balance_after": 339.60453503,
        "created_at": "2026-10-11T16:58:00.000000Z"
      },
      {
        "id": 1247879,
        "type": "purchase",
        "amount": 0.01197016,
        "direction": "out",
        "signed_amount": -0.01197016,
        "balance_after": 339.62847535,
        "created_at": "2026-10-11T16:30:01.000000Z"
      },
      {
        "id": 1247463,
        "type": "purchase",
        "amount": 0.00455153,
        "direction": "out",
        "signed_amount": -0.00455153,
        "balance_after": 339.64044551,
        "created_at": "2026-10-11T14:32:46.000000Z"
      }
    ]
  }
}

Delete your account

API key
DELETE/api/v2/user/account

Closes the account. Requires your password. This cannot be undone through the API.

Body application/json

FieldTypeRequiredDescription
passwordstringyes

Request

curl -X DELETE "https://bulkmail.shop/api/v2/user/account" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"password": "your-password"}'

Responses

{
  "success": true,
  "message": "Account deleted successfully"
}

Products

The catalogue and prices. Public; send your key to see your own prices.

List products

Public (API key optional)
GET/api/v2/products

The catalogue, paginated. Send your API key to get your own prices: pricing flags appear only when they apply.

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems per page, 1-100 (default 20).
searchquerystringText to find in name, SKU or description. Alias: q.
tab_idqueryintegerOnly products in this tab (see /tabs).
in_stockquerybooleantrue = in stock only, false = out of stock only.
sortquerystring
name | price | stock_quantity | created_at
Sort field (default name).
orderquerystring
asc | desc
Sort direction (default asc).

Request

curl -X GET "https://bulkmail.shop/api/v2/products?per_page=2"

Responses

{
  "success": true,
  "data": [
    {
      "id": 911,
      "name": "✔️ live 2 minute xxx@RanDom",
      "sku": "LIVE2MINUTEX",
      "tab_id": 26,
      "price": 0.00253132,
      "base_price": 0.00260961,
      "user_discount_applied": true,
      "user_discount_percent": 3,
      "stock_quantity": 0,
      "in_stock": false,
      "bulk_pricing_enabled": false,
      "image_url": null,
      "image_type": null,
      "created_at": "2026-09-19T15:06:13.000000Z",
      "is_pack": false,
      "allowed_quantities": null,
      "pack_options": null,
      "description": "✔️ live 2 minute xxx@RanDom",
      "description_format": "text",
      "description_text": "✔️ live 2 minute xxx@RanDom",
      "description_html": null
    },
    {
      "id": 906,
      "name": "10 Minutes – 99 per [ID 180] ----No",
      "sku": "10PHT99PERID",
      "tab_id": 26,
      "price": 0.00353677,
      "base_price": 0.00364615,
      "user_discount_applied": true,
      "user_discount_percent": 3,
      "stock_quantity": 0,
      "in_stock": false,
      "bulk_pricing_enabled": false,
      "image_url": null,
      "image_type": null,
      "created_at": "2026-09-13T18:07:05.000000Z",
      "is_pack": false,
      "allowed_quantities": null,
      "pack_options": null,
      "description": "10 Minutes – 99 /Time [ID 180] ----No",
      "description_format": "text",
      "description_text": "10 Minutes – 99 /Time [ID 180] ----No",
      "description_html": null
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 2,
    "total": 427,
    "total_pages": 214
  }
}

Get a product

Public (API key optional)
GET/api/v2/products/{id}

One product with its features, and bulk_pricing_tiers when bulk pricing applies to you.

Parameters

NameInTypeRequiredDescription
idpathintegeryesProduct id.

Request

curl -X GET "https://bulkmail.shop/api/v2/products/986"

Responses

{
  "success": true,
  "data": {
    "id": 986,
    "name": "1h - 12h edu.pl",
    "sku": "1H12HEDUPL",
    "tab_id": 42,
    "price": 0.02571542,
    "base_price": 0.02651074,
    "user_discount_applied": true,
    "user_discount_percent": 3,
    "stock_quantity": 1022,
    "in_stock": true,
    "bulk_pricing_enabled": false,
    "image_url": null,
    "image_type": null,
    "created_at": "2026-10-04T18:20:15.000000Z",
    "is_pack": false,
    "allowed_quantities": null,
    "pack_options": null,
    "description": "1h - 12h edu.pl",
    "description_format": "text",
    "description_text": "1h - 12h edu.pl",
    "description_html": null,
    "features": []
  }
}

Calculate a price

Public (API key optional)
POST/api/v2/products/{id}/calculate-price

What a quantity would cost you. Pack products accept only their allowed_quantities.

Parameters

NameInTypeRequiredDescription
idpathintegeryesProduct id.

Body application/json

FieldTypeRequiredDescription
quantityintegeryes1 or more; for pack products one of allowed_quantities.

Request

curl -X POST "https://bulkmail.shop/api/v2/products/986/calculate-price" \
  -H "Content-Type: application/json" \
  -d '{"quantity": 10}'

Responses

{
  "success": true,
  "data": {
    "product_id": 986,
    "quantity": 10,
    "base_price": 0.02651074,
    "applied_price": 0.02571542,
    "total_amount": 0.25715,
    "discount_percentage": 3,
    "user_discount_applied": true,
    "user_discount_percent": 3,
    "price_before_user_discount": 0.02651
  }
}

List tabs (categories)

Public (API key optional)
GET/api/v2/tabs

Storefront tabs in display order. A product's tab_id points here.

Request

curl -X GET "https://bulkmail.shop/api/v2/tabs"

Responses

{
  "success": true,
  "data": [
    {
      "id": 7,
      "name": "All",
      "slug": "all",
      "title": "Popular Shop",
      "description": "",
      "logo_url": null,
      "sort_order": -2,
      "product_count": 0
    },
    {
      "id": 6,
      "name": "Hotmail Outlook ",
      "slug": "hotmail-outlook",
      "title": "Hotmail Outlook ",
      "description": "",
      "logo_url": "https://bulkmail.shop/uploads/icons/icon_187.webp",
      "sort_order": -1,
      "product_count": 34
    },
    {
      "id": 4,
      "name": "Outlook Domain Country ",
      "slug": "outlook-domain-country",
      "title": "Outlook Domain Country ",
      "description": "",
      "logo_url": "https://bulkmail.shop/uploads/icons/icon_136.webp",
      "sort_order": 0,
      "product_count": 30
    }
  ]
}

Stock

Live stock figures. Public.

Stock of all products

Public (API key optional)
GET/api/v2/stock

Every product on sale with its stock (not paginated). last_updated is when that figure was refreshed.

Request

curl -X GET "https://bulkmail.shop/api/v2/stock"

Responses

{
  "success": true,
  "data": {
    "products": [
      {
        "id": 911,
        "name": "✔️ live 2 minute xxx@RanDom",
        "sku": "LIVE2MINUTEX",
        "stock": 0,
        "in_stock": false,
        "is_pack": false,
        "allowed_quantities": null,
        "last_updated": "2026-10-11T17:33:03.000000Z"
      },
      {
        "id": 906,
        "name": "10 Minutes – 99 per [ID 180] ----No",
        "sku": "10PHT99PERID",
        "stock": 0,
        "in_stock": false,
        "is_pack": false,
        "allowed_quantities": null,
        "last_updated": "2026-10-11T17:33:03.000000Z"
      },
      {
        "id": 986,
        "name": "1h - 12h edu.pl",
        "sku": "1H12HEDUPL",
        "stock": 1022,
        "in_stock": true,
        "is_pack": false,
        "allowed_quantities": null,
        "last_updated": "2026-10-11T17:31:29.000000Z"
      }
    ],
    "total_products": 427,
    "timestamp": "2026-10-11T17:33:03.000000Z"
  }
}

Stock of one product

Public (API key optional)
GET/api/v2/stock/{id}

Parameters

NameInTypeRequiredDescription
idpathintegeryesProduct id.

Request

curl -X GET "https://bulkmail.shop/api/v2/stock/986"

Responses

{
  "success": true,
  "data": {
    "id": 986,
    "name": "1h - 12h edu.pl",
    "sku": "1H12HEDUPL",
    "stock": 1022,
    "in_stock": true,
    "is_pack": false,
    "allowed_quantities": null,
    "last_updated": "2026-10-11T17:31:29.000000Z"
  }
}

Stock of several products

Public (API key optional)
GET/api/v2/stock/check

Parameters

NameInTypeRequiredDescription
idsquerystringyesComma-separated product ids, up to 50.

Request

curl -X GET "https://bulkmail.shop/api/v2/stock/check?ids=986,1003,99999999"

Responses

{
  "success": true,
  "data": {
    "products": [
      {
        "id": 986,
        "name": "1h - 12h edu.pl",
        "stock": 1022,
        "in_stock": true,
        "is_pack": false,
        "allowed_quantities": null
      },
      {
        "id": 1003,
        "name": "Custom Domain Gmail | 24H | Pesviv.com",
        "stock": 3594,
        "in_stock": true,
        "is_pack": true,
        "allowed_quantities": [
          12,
          25,
          35,
          45,
          65,
          85,
          95,
          135,
          405,
          540,
          675,
          1350
        ]
      },
      {
        "id": 99999999,
        "error": "Product not found",
        "stock": 0,
        "in_stock": false
      }
    ],
    "timestamp": "2026-10-11T17:33:03.000000Z"
  }
}

Stock per category

Public (API key optional)
GET/api/v2/stock/categories

Stock totals per storefront tab, in /tabs order. Tabs with nothing on sale are left out.

Request

curl -X GET "https://bulkmail.shop/api/v2/stock/categories"

Responses

{
  "success": true,
  "data": {
    "categories": [
      {
        "tab_id": 6,
        "category": "Hotmail Outlook ",
        "slug": "hotmail-outlook",
        "products": 34,
        "total_stock": 926861,
        "in_stock_products": 18
      },
      {
        "tab_id": 4,
        "category": "Outlook Domain Country ",
        "slug": "outlook-domain-country",
        "products": 30,
        "total_stock": 412677,
        "in_stock_products": 26
      },
      {
        "tab_id": 9,
        "category": "Short Live Mail",
        "slug": "short-live-mail",
        "products": 3,
        "total_stock": 0,
        "in_stock_products": 0
      }
    ],
    "timestamp": "2026-10-11T17:33:04.000000Z"
  }
}

Orders

Buy products and read your orders.

List your orders

API key
GET/api/v2/orders

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems per page, 1-100 (default 20).
statusquerystring
pending | completed | cancelled | refunded
date_fromquerystringYYYY-MM-DD
date_toquerystringYYYY-MM-DD (inclusive)

Request

curl -X GET "https://bulkmail.shop/api/v2/orders?per_page=2" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [
    {
      "id": 1232875,
      "product_id": 13,
      "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
      "quantity": 2,
      "unit_price": 0.01197016,
      "total_amount": 0.02394032,
      "status": "completed",
      "created_at": "2026-10-11T16:58:00.000000Z"
    },
    {
      "id": 1232770,
      "product_id": 13,
      "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
      "quantity": 1,
      "unit_price": 0.01197016,
      "total_amount": 0.01197016,
      "status": "completed",
      "created_at": "2026-10-11T16:30:01.000000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 2,
    "total": 3656,
    "total_pages": 1828
  }
}

Get an order

API key
GET/api/v2/orders/{id}

The price you paid (unit_price, subtotal, discount_amount, total_amount) and the delivered lines. product.price is today's price.

Parameters

NameInTypeRequiredDescription
idpathintegeryesOrder id.

Request

curl -X GET "https://bulkmail.shop/api/v2/orders/1232875" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "id": 1232875,
    "product_id": 13,
    "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
    "quantity": 2,
    "unit_price": 0.01197016,
    "subtotal": 0.02394032,
    "discount_amount": 0,
    "reward_code": null,
    "total_amount": 0.02394032,
    "status": "completed",
    "created_at": "2026-10-11T16:58:00.000000Z",
    "updated_at": "2026-10-11T16:58:00.000000Z",
    "product": {
      "id": 13,
      "name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
      "sku": "EDUMAIL-0029",
      "price": 0.01234037
    },
    "items": [
      {
        "id": 9753601,
        "data": "[email protected]|Sample2",
        "sold_at": "2026-10-11T16:58:00.000000Z"
      },
      {
        "id": 9753602,
        "data": "[email protected]|Sample2",
        "sold_at": "2026-10-11T16:58:00.000000Z"
      }
    ]
  }
}

Place an order

API key
POST/api/v2/orders

Buys a product: your balance is charged and the account lines come back in items. Manual products answer with status pending (or completed when ready stock covered it) and are delivered later. If the supplier is still delivering an order, the reply has status pending, empty (or partial) items and a deliver_by time: fetch GET /orders/{id} for the accounts (usually within 1-2 minutes). If they have not arrived by deliver_by, the order is refunded in full automatically (status refunded); do not place it again while it is pending.

Body application/json

FieldTypeRequiredDescription
product_idintegeryesProduct id (see GET /products).
quantityintegeryes1 or more; for pack products one of allowed_quantities.
reward_codestringOptional discount code.

Request

curl -X POST "https://bulkmail.shop/api/v2/orders" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 986, "quantity": 2}'

Responses

{
  "success": true,
  "data": {
    "order_id": 1232999,
    "product_name": "1h - 12h edu.pl",
    "quantity": 2,
    "unit_price": 0.02571542,
    "total_amount": 0.05143084,
    "balance_remaining": 125.44856916,
    "items": [
      "[email protected]:Sample2",
      "[email protected]:Sample2"
    ]
  }
}

Cancel an order

API key
POST/api/v2/orders/{id}/cancel

Only pending orders can be cancelled.

Parameters

NameInTypeRequiredDescription
idpathintegeryesOrder id.

Request

curl -X POST "https://bulkmail.shop/api/v2/orders/99999999/cancel" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": false,
  "error": "Order not found"
}

Export delivered lines

API key
GET/api/v2/orders/{id}/export

The order's delivered lines. format=csv or format=txt returns plain lines instead of JSON.

Parameters

NameInTypeRequiredDescription
idpathintegeryesOrder id.
formatquerystring
json | csv | txt
Default json.

Request

curl -X GET "https://bulkmail.shop/api/v2/orders/1232875/export" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [
    {
      "id": 9753601,
      "data": "[email protected]|Sample2",
      "sold_at": "2026-10-11T16:58:00.000000Z"
    },
    {
      "id": 9753602,
      "data": "[email protected]|Sample2",
      "sold_at": "2026-10-11T16:58:00.000000Z"
    }
  ]
}

Wallet

Balance, transactions and deposits.

Get your balance

API key
GET/api/v2/wallet/balance

Request

curl -X GET "https://bulkmail.shop/api/v2/wallet/balance" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "balance": 339.60453503,
    "currency": "USD"
  }
}

List transactions

API key
GET/api/v2/wallet/transactions

Your ledger, newest first. amount is unsigned; direction and signed_amount say whether money came in or went out.

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems per page, 1-100 (default 20).
typequerystring
deposit | withdrawal | purchase | refund | custom_mail | credit | debit
credit = admin top-up or referral reward. An unknown type returns no rows.
date_fromquerystring
date_toquerystring

Request

curl -X GET "https://bulkmail.shop/api/v2/wallet/transactions?per_page=2" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [
    {
      "id": 1247991,
      "type": "purchase",
      "amount": 0.02394032,
      "direction": "out",
      "signed_amount": -0.02394032,
      "balance_after": 339.60453503,
      "created_at": "2026-10-11T16:58:00.000000Z"
    },
    {
      "id": 1247879,
      "type": "purchase",
      "amount": 0.01197016,
      "direction": "out",
      "signed_amount": -0.01197016,
      "balance_after": 339.62847535,
      "created_at": "2026-10-11T16:30:01.000000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 2,
    "total": 3663,
    "total_pages": 1832
  }
}

Start a deposit

API key
POST/api/v2/wallet/deposit

Creates a payment with a gateway and returns its payment_url. Gateways switched off by the shop are refused.

Body application/json

FieldTypeRequiredDescription
amountnumberyesUSD. Minimums apply per gateway.
payment_methodstring
heleket | crypto | cryptomus | piprapay
yesAlias: gateway.
crypto_currencystringDefault USDT.
crypto_networkstringDefault TRON.

Request

curl -X POST "https://bulkmail.shop/api/v2/wallet/deposit" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 10, "payment_method": "heleket"}'

Responses

{
  "success": true,
  "data": {
    "deposit_id": 52011,
    "amount": 10,
    "payment_method": "crypto",
    "status": "pending",
    "payment_url": "https://pay.heleket.com/pay/00000000-0000-0000-0000-000000000000",
    "expires_at": "2026-10-11T18:30:00.000000Z"
  }
}

List deposits

API key
GET/api/v2/wallet/deposits

Payment-gateway deposits only. Admin top-ups appear as credit transactions instead.

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems per page, 1-100 (default 20).
statusquerystring
pending | completed | approved | rejected | cancelled

Request

curl -X GET "https://bulkmail.shop/api/v2/wallet/deposits" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [],
  "meta": {
    "current_page": 1,
    "per_page": 20,
    "total": 0,
    "total_pages": 0
  }
}

Get a deposit

API key
GET/api/v2/wallet/deposits/{id}

Parameters

NameInTypeRequiredDescription
idpathintegeryesDeposit id.

Request

curl -X GET "https://bulkmail.shop/api/v2/wallet/deposits/52011" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "id": 52011,
    "status": "completed",
    "amount": 10,
    "payment_method": "crypto"
  }
}

Purchases

Every account line delivered to you.

List purchased lines

API key
GET/api/v2/purchases

Every account line delivered to you, newest first.

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems per page, 1-100 (default 20).
product_idqueryinteger
order_idqueryinteger

Request

curl -X GET "https://bulkmail.shop/api/v2/purchases?per_page=2" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [
    {
      "id": 9753601,
      "product_id": 13,
      "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
      "order_id": 1232875,
      "data": "[email protected]|Sample2",
      "sold_at": "2026-10-11T16:58:00.000000Z"
    },
    {
      "id": 9753602,
      "product_id": 13,
      "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
      "order_id": 1232875,
      "data": "[email protected]|Sample2",
      "sold_at": "2026-10-11T16:58:00.000000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 2,
    "total": 14574,
    "total_pages": 7287
  }
}

Get a purchased line

API key
GET/api/v2/purchases/{id}

Parameters

NameInTypeRequiredDescription
idpathintegeryesPurchase (line) id.

Request

curl -X GET "https://bulkmail.shop/api/v2/purchases/9753601" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": {
    "id": 9753601,
    "product_id": 13,
    "product_name": "Gmail Edu domain rental for 24 hours (.us domain) with Gmail",
    "order_id": 1232875,
    "data": "[email protected]|Sample2",
    "sold_at": "2026-10-11T16:58:00.000000Z"
  }
}

API Keys

Manage the keys that authenticate you.

List your API keys

API key
GET/api/v2/api-keys

Active keys, prefix only. last_used_at updates at most every 5 minutes.

Request

curl -X GET "https://bulkmail.shop/api/v2/api-keys" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "data": [
    {
      "id": 436,
      "key_prefix": "sk_live_a1b2...",
      "created_at": "2026-07-20T09:25:29.000000Z",
      "last_used_at": "2026-10-11T17:20:46.000000Z"
    },
    {
      "id": 737,
      "key_prefix": "sk_live_a1b2...",
      "created_at": "2026-10-11T14:42:24.000000Z",
      "last_used_at": "2026-10-11T17:33:00.000000Z"
    }
  ]
}

Create an API key

API key
POST/api/v2/api-keys

Up to 5 active keys. The full key is shown only in this response.

Request

curl -X POST "https://bulkmail.shop/api/v2/api-keys" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "message": "API key created. Store it securely - it won't be shown again.",
  "data": {
    "id": 812,
    "key": "sk_live_0000000000000000000000000000000000000000000000000000000000000000",
    "created_at": "2026-10-11T17:00:00.000000Z"
  }
}

Revoke an API key

API key
DELETE/api/v2/api-keys/{id}

Parameters

NameInTypeRequiredDescription
idpathintegeryesAPI key id.

Request

curl -X DELETE "https://bulkmail.shop/api/v2/api-keys/812" \
  -H "X-API-Key: YOUR_API_KEY"

Responses

{
  "success": true,
  "message": "API key revoked successfully"
}