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

# Create Special Campaign

> This endpoint is used to create a special campaign

export const EcosystemURLBlock = ({content = [], title = ""}) => {
  return <div style={{
    backgroundColor: "#6B3B900A",
    borderRadius: "8px",
    borderColor: "#F8F8F8"
  }} className="flex flex-col gap-4 border p-6">
      {title && <p className="font-bold text-2xl" style={{
    color: "#1C1C1C",
    marginBlock: "0px"
  }}>
          {title || ""}
        </p>}

      {content.length > 0 && content?.map((el, id) => <div key={id} className="flex flex-col [&>*]:my-0 gap-2">
            <div className="flex items-center justify-between [&>*]:my-0" style={{
    height: "fit-content"
  }}>
              <span className="font-bold" style={{
    color: "#1C1C1CCC",
    marginBlock: "0px"
  }}>
                {el.title}
              </span>
              <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" onClick={async () => {
    await navigator.clipboard.writeText(el.caption);
    alert("Link copied!");
  }}>
                <path d="M6 10C6 8.1144 6 7.1716 6.58579 6.58579C7.1716 6 8.1144 6 10 6H10.6667C12.5523 6 13.4951 6 14.0809 6.58579C14.6667 7.1716 14.6667 8.1144 14.6667 10V10.6667C14.6667 12.5523 14.6667 13.4951 14.0809 14.0809C13.4951 14.6667 12.5523 14.6667 10.6667 14.6667H10C8.1144 14.6667 7.1716 14.6667 6.58579 14.0809C6 13.4951 6 12.5523 6 10.6667V10Z" stroke="#191B1F" stroke-opacity="0.6" stroke-linecap="round" stroke-linejoin="round" />
                <path d="M11.3334 6.00016C11.3318 4.02877 11.302 3.00764 10.7282 2.30845C10.6174 2.17342 10.4936 2.04962 10.3586 1.9388C9.62096 1.3335 8.52516 1.3335 6.3335 1.3335C4.14184 1.3335 3.04602 1.3335 2.30845 1.9388C2.17342 2.04961 2.04962 2.17342 1.9388 2.30845C1.3335 3.04602 1.3335 4.14184 1.3335 6.3335C1.3335 8.52516 1.3335 9.62096 1.9388 10.3586C2.04961 10.4936 2.17342 10.6174 2.30845 10.7282C3.00764 11.302 4.02877 11.3318 6.00016 11.3334" stroke="#191B1F" stroke-opacity="0.6" stroke-linecap="round" stroke-linejoin="round" />
              </svg>
            </div>
            <p className="font-medium text-sm border-none" style={{
    color: el.color || "#1C1C1CCC"
  }}>
              {el.caption}
            </p>
          </div>)}
    </div>;
};

export const Table = ({data = []}) => <div className="text-sm font-mono">
    <div style={{
  gap: 10,
  display: "grid",
  padding: "5px 10px",
  backgroundColor: "#F7F9FB",
  color: "rgba(25,27,31,0.6)",
  gridTemplateColumns: "repeat(3, minmax(0, 1fr))"
}}>
      <span>name</span>
      <span>type</span>
      <span>Description</span>
    </div>
    {data?.map((item, idx) => <div key={idx} style={{
  gap: 10,
  display: "grid",
  padding: "8px 10px",
  color: "rgba(25,27,31,0.8)",
  gridTemplateColumns: "repeat(3, minmax(0, 1fr))"
}}>
        <span className="break-words">{item.name}</span>
        <span>{item.type}</span>
        <span>{item.desc}</span>
      </div>)}
  </div>;

export const NoteStatement = ({label, message}) => <div className="relative text-sm" style={{
  borderRadius: 16,
  padding: "1px 20px",
  backgroundColor: "rgba(252,155,28,.06)"
}}>
    <p style={{
  marginBlock: 0
}}>
      {label && <span>
          <span className="font-bold" style={{
  color: "#fc9b1c"
}}>
            {label || "PS"}
          </span>
          {message && `: `}
        </span>}
      {message}
    </p>
    <div className="absolute left-0 top-1/2 -translate-y-1/2 rounded-e-full" style={{
  width: 2,
  height: 35,
  backgroundColor: "#fc9b1c"
}} />
  </div>;

####

<EcosystemURLBlock
  content={[
{
  title: "URL",
  caption: "https://test-api.bvndle.com/api/v1/laas/special-campaigns",
  color: "#6B3B90",
},
{
  title: "Base URL",
  caption: "https://test-api.bvndle.com/api/v1/laas",
  color: "#6B3B90",
},
{
  title: "HTTP Method",
  caption: "POST",
},
{
  title: "Authorization Header",
  caption: "Bearer ACCESS_TOKEN",
},
]}
/>

###

<NoteStatement label="Request Body" />

<Table
  data={[
{
  name: "name",
  type: "string",
  desc: (
    <>
      Required <br />
      Name of the campaign
    </>
  ),
},
{
  name: "description",
  type: "string",
  desc: (
    <>
      Required <br />A short description of the camapaign
    </>
  ),
},
{
  name: "startDate",
  type: "date",
  desc: (
    <>
      Required <br />
      Start date for the campaign
    </>
  ),
},
{
  name: "endDate",
  type: "date",
  desc: (
    <>
      Required <br />
      The end date for the campaign
    </>
  ),
},

{
  name: "events",
  type: "array",
  desc: (
    <>
      Required <br />
    </>
  ),
},

{
  name: "eventType",
  type: "string",
  desc: (
    <>
      Required <br />
      This is the event type <br />
      • mission <br />
      • raffle <br />
      • spin the wheel <br />
    </>
  ),
},
{
  name: "mission.name",
  type: "string",
  desc: (
    <>
      Optional <br />
      This is the mission name <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.description",
  type: "string",
  desc: (
    <>
      Optional <br />
      This is the mission description <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.pointsReward",
  type: "number",
  desc: (
    <>
      Optional <br />
      This is the number of points gotten for completing missions <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.startDate",
  type: "date",
  desc: (
    <>
      Optional <br />
      This is the start date of the mission <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.endDate",
  type: "date",
  desc: (
    <>
      Optional <br />
      The end date for the mission <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.badgeId",
  type: "date",
  desc: (
    <>
      Optional <br />
      This is the user's badgeId <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "mission.requirements",
  type: "string",
  desc: (
    <>
      Required <br />
      These are the requirements for the mission to be passed <br />
      Only required when eventType is mission
    </>
  ),
},
{
  name: "eventType.raffle",
  type: "array",
  desc: (
    <>
      Optional <br />
    </>
  ),
},
{
  name: "raffle.startDate",
  type: "date",
  desc: (
    <>
      Optional <br />
      The start date for the raffle <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "raffle.endDate",
  type: "date",
  desc: (
    <>
      Optional <br />
      The end date for the raffle <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "raffle.prizes",
  type: "array",
  desc: (
    <>
      Optional <br />
      This is the prize for the raffle <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "prizes.coin",
  type: "number",
  desc: (
    <>
      Optional <br />
      This is the number of coins for each raffle win <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "prizes.timeline",
  type: "string",
  desc: (
    <>
      Optional <br />
      This is the timeline for the raffle <br />
      • daily <br />
      • weekly <br />
      • monthly <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "raffle.entryFees",
  type: "array",
  desc: (
    <>
      Optional <br />
      This is the fee to enter into the raffle <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "entryFees.type",
  type: "string",
  desc: (
    <>
      Optional <br />
      This is the type of the entry fee - either coin or airtime <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "entryFees.fee",
  type: "number",
  desc: (
    <>
      Optional <br />
      This is the amount needed to enter <br />
      Only required when eventType is raffle
    </>
  ),
},
{
  name: "eventType.spinWheel",
  type: "array",
  desc: (
    <>
      Optional <br />
      Only required when eventType is spinWheel
    </>
  ),
},
{
  name: "spinWheel.maxSpin",
  type: "number",
  desc: (
    <>
      Optional <br />
      The max number of spins per user <br />
      Only required when eventType is spinWheel
    </>
  ),
},
{
  name: "spinWheel.name",
  type: "string",
  desc: (
    <>
      Optional <br />
      The name of the spinWheel game <br />
      Only required when eventType is spinWheel
    </>
  ),
},
{
  name: "spinWheel.entryFees",
  type: "array",
  desc: (
    <>
      Optional <br />
      The max number of spins per user <br />
      Only required when eventType is spinWheel
    </>
  ),
},
{
  name: "entryFees.type",
  type: "string",
  desc: (
    <>
      Optional <br />
      This is the type of the entry fee - either coin or airtime <br />
      Only required when eventType is spinWheel
    </>
  ),
},
{
  name: "entryFees.fee",
  type: "number",
  desc: (
    <>
      Optional <br />
      This is the amount needed to enter <br />
      Only required when eventType is spinWheel
    </>
  ),
},

]}
/>

###

```bash cURL theme={null}
curl --request POST
'https://test-api.bvndle.com/api/v1/laas/special-campaigns' \


--data '{
    "name": "New Special campaign",
    "description": "Test special campaign",
    "startDate": "2025-09-03",
    "endDate": "2025-12-15",
    "events": [
        {
            "eventType": "mission",
            "mission": {
                "name": "1K Yearly data purchase",
                "description": "Recharge data daily",
                "pointsReward": 1,
                "startDate": "2025-09-06",
                "endDate": "2025-12-15",
                "transactionPin": "1234",
                "badgeId": "34d48345-18ab-4ba0-b9b7-07a7bf767666",
                "requirements": [
                    "Finish your airtime",
                    "Recharge a new batch of airtime"
                ]
            }
        }
        // {
        //     "eventType": "raffle",
        //     "raffle": {
        //         "startDate": "2025-09-03",
        //         "endDate": "2025-09-10",
        //         "prizes": [
        //             {
        //                 "coin": 10,
        //                 "timeline": "daily"
        //             },
        //             {
        //                 "coin": 50,
        //                 "timeline": "weekly"
        //             },
        //             {
        //                 "coin": 100,
        //                 "timeline": "monthly"
        //             }
        //         ],
        //         "entryFees": [
        //             {
        //                 "type": "coin",
        //                 "fee": 2
        //             },
        //             {
        //                 "type": "airtime",
        //                 "fee": 10
        //             }
        //         ]
        //     }
        // },
        // {
        //     "eventType": "spinWheel",
        //     "spinWheel": {
        //         "maxSpins": -1,
        //         "name": "Another spin wheel",
        //         "entryFees": [
        //             {
        //                 "fee": 5,
        //                 "type": "coins"
        //             },
        //             {
        //                 "fee": 200,
        //                 "type": "airtime"
        //             }
        //         ]
        //     }
        // }
    ]
}'
```

####

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "message": "special campaign created successfully",
    "data": {
      "id": "7bf6fbf0-94a1-4d13-94f8-bd5eb045309d",
      "name": "New Special campaign",
      "description": "Test special campaign",
      "startDate": "2025-09-03",
      "endDate": "2025-12-15",
      "status": "active",
      "events": [
        {
          "id": "b0a01dc3-9c1d-4d6e-ae2a-5743fa1e3497",
          "spinWheel": {},
          "mission": {
            "id": "51eaebe9-9c70-4285-97b8-364166db6f9c",
            "name": "1k yearly data purchase",
            "description": "Recharge data daily",
            "pointsReward": 1,
            "startDate": "2025-09-06",
            "endDate": "2025-12-15",
            "createdAt": "2025-10-16T08:54:08.036Z",
            "updatedAt": "2025-10-16T08:54:08.036Z",
            "partner": {},
            "requirements": [
              "Finish your airtime",
              "Recharge a new batch of airtime"
            ],
            "badge": {
              "id": "34d48345-18ab-4ba0-b9b7-07a7bf767666",
              "name": "shadow ninja",
              "description": "Hello",
              "partner": {},
              "icon": null
            }
          },
          "raffle": {},
          "eventType": "mission",
          "createdAt": "2025-10-16T08:54:08.047Z",
          "updatedAt": "2025-10-16T08:54:08.047Z"
        }
      ],
      "createdAt": "2025-10-16T08:54:07.997Z",
      "updatedAt": "2025-10-16T08:54:07.997Z"
    }
  }
  ```
</ResponseExample>
