> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.bulkneo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# BulkNeo WhatsApp API

> Send WhatsApp messages from your own numbers, straight from your software.

BulkNeo lets your software send WhatsApp messages from **your own WhatsApp numbers**.

You connect a number once by scanning a QR code, the same way you link WhatsApp Web. After that, one HTTP request sends a message from that number — a text, a PDF, an image, a location, a poll. There is no app to install and nothing to keep running on your side.

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Connect a number, create a key, send your first message. About five minutes.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/introduction">
    Every endpoint, every field, with a playground you can send real requests from.
  </Card>
</CardGroup>

## What people use it for

<AccordionGroup>
  <Accordion title="Order and delivery updates" icon="truck">
    "Order #2043 confirmed", "Your parcel is out for delivery". Send them from the number your customers already message you on, at the moment your system knows about them — not in a nightly batch.
  </Accordion>

  <Accordion title="Invoices and receipts as PDFs" icon="file-invoice">
    Put the PDF on a public link and send it with [`/v1/messages/document`](/api-reference/messages/document). The customer gets a real file they can keep, named the way you want it.
  </Accordion>

  <Accordion title="One-time passwords and verification codes" icon="key">
    A short text message, sent the second your system generates the code. Keep the [rate limit](/errors#rate-limits) in mind and always give people a fallback route in.
  </Accordion>

  <Accordion title="Appointment reminders" icon="calendar">
    "Your appointment is tomorrow at 10:00." Add a [poll](/api-reference/messages/poll) if you want them to pick a slot, or a plain "reply YES to confirm".
  </Accordion>

  <Accordion title="Internal alerts" icon="bell">
    Low stock, a failed payment, a machine gone offline. Send them to a staff number from a number your team recognises.
  </Accordion>
</AccordionGroup>

## Who it is for

Anyone who can make an HTTP request. If you can call an API from your website, your billing software, your ERP or a low-code tool, you can use this. The examples below are cURL, Node.js and Python, but nothing here is language-specific — it is JSON over HTTPS.

## How it works

<Steps>
  <Step title="Connect a number">
    In the portal, add a number and scan the QR with WhatsApp on that phone. The number stays linked, like WhatsApp Web on a computer.
  </Step>

  <Step title="Create an API key">
    One key identifies your account. It is shown once, so store it somewhere safe on your server.
  </Step>

  <Step title="Send">
    `POST` to the endpoint for the kind of message you are sending, with your key in an `apikey` header and the `instance_id` of the number it should go out from.
  </Step>
</Steps>

```bash Send a text message theme={null}
curl -X POST https://api.bulkneo.com/v1/messages/text \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instance_id": "YOUR_INSTANCE_ID",
    "to": "919876543210",
    "text": "Your order #2043 has shipped."
  }'
```

## What you can send

Twelve message types, each with its own endpoint:

<CardGroup cols={3}>
  <Card title="Text" href="/api-reference/messages/text" />

  <Card title="Image" href="/api-reference/messages/image" />

  <Card title="Video" href="/api-reference/messages/video" />

  <Card title="Document" href="/api-reference/messages/document" />

  <Card title="Voice note" href="/api-reference/messages/audio" />

  <Card title="Sticker" href="/api-reference/messages/sticker" />

  <Card title="Location" href="/api-reference/messages/location" />

  <Card title="Contact card" href="/api-reference/messages/contact" />

  <Card title="Reaction" href="/api-reference/messages/reaction" />

  <Card title="Poll" href="/api-reference/messages/poll" />

  <Card title="List menu" href="/api-reference/messages/list" />

  <Card title="Buttons" href="/api-reference/messages/buttons" />
</CardGroup>

You can also [check whether numbers are on WhatsApp](/api-reference/numbers/check) before you send to them, and [manage your connected numbers](/api-reference/instances/list) from the API.

## What it does not do

Being honest about this up front saves you an afternoon:

* **No incoming messages and no webhooks.** The API sends. It does not deliver replies to you, and there is nothing to subscribe to. Read the [full list of what is not built](/guides/not-available-yet).
* **No bulk endpoint.** One request sends one message. Loop over your list and pace it against your [rate limit](/errors#rate-limits).
* **No scheduling.** A request sends now. Schedule it on your side.
* **No file upload.** Media is sent from a public link you host — see [Sending media](/guides/sending-media).

## Where to go next

<CardGroup cols={2}>
  <Card title="Quickstart" icon="play" href="/quickstart">
    From nothing to a message on someone's phone.
  </Card>

  <Card title="Authentication" icon="lock" href="/authentication">
    How keys work, and how to rotate one safely.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/errors">
    Every error code, what causes it and what to do about it.
  </Card>

  <Card title="If your number disconnects" icon="plug-circle-xmark" href="/guides/disconnects">
    The one operational problem every integration eventually hits.
  </Card>
</CardGroup>
