> ## 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.

# Onboarding - Bulk

export const TableWIthLongDesc = ({data, name, type, desc}) => <div style={{
  marginBlock: "30px"
}} className="text-sm font-mono">
    <div style={{
  rowGap: "16px",
  columnGap: "2px",
  backgroundColor: "#F7F9FB",
  paddingBlock: "5px",
  paddingInline: "10px",
  color: "rgba(25,27,31,0.6)",
  gridTemplateColumns: "repeat(2, 1fr)"
}} className="grid">
      <div className="col-span-1 flex flex-col gap-2">
        <span>name</span>
        <span style={{
  color: "rgba(25,27,31,0.8)"
}}>{name}</span>
      </div>
      <div className="col-span-1 flex flex-col gap-2">
        <span>type</span>
        <span style={{
  color: "rgba(25,27,31,0.8)"
}}>{type}</span>
      </div>
      <div className="col-span-2 flex flex-col gap-2">
        <span>Description</span>
        <span style={{
  color: "rgba(25,27,31,0.8)"
}}>{desc}</span>
      </div>
    </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>;

export const URLBlock = ({url = "", content = [], cannotCopy = false, 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>}

      <div 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"
  }}>
            URL
          </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(url);
    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: "#DC5695",
    marginBlock: "0px"
  }}>
          {url}
        </p>
      </div>

      {content.length > 0 && content.map((item, idx) => <div key={idx} className="flex flex-col [&>*]:my-0 gap-2 text-sm">
            <div className="flex items-center justify-between [&>*]:my-0" style={{
    height: "fit-content"
  }}>
              <span className="font-bold" style={{
    color: "#1C1C1CCC",
    marginBlock: "0px"
  }}>
                {item?.title || ""}
              </span>
              {!cannotCopy && <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(item.caption);
    alert("content 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>
            {item.caption}
          </div>)}
    </div>;
};

Onboard your users with this endpoint. Onboard as many user as possible with one call. This route is asynchronous. If request is successful, you’ll receive a webhook on your status.

<div
  style={{
borderRadius: "8px",
borderColor: "#F8F8F8",
backgroundColor: "#F8F8F8",
fontSize: "13px",
}}
  className="border p-6"
>
  Authenticate your API calls by including your secret key in the Authorization
  header of every request you make. You can manage your API keys from the
  dashboard.
</div>

####

<NoteStatement label="Note" message="UserIds should be UUID and unique. You should also save them on your end as this is the only way we can identify your users." />

##

<URLBlock
  url="https://test-api.bvndle.com/api/v1/laas/onboard-users"
  content={[
{ title: "HTTP Method", caption: "POST" },
{
  title: "Authorization Header",
  caption: "Bearer ACCESS_TOKEN",
},
]}
/>

<TableWIthLongDesc
  name="users"
  type="array"
  desc={
<>
  Required <br />{" "}
  {`Array of object with each object containing userId and userData {“userId” : UUID, “userData: {object containing additional information about user}}`}
</>
}
/>

```bash cURL theme={null}
curl --request POST 'https://test-api.bvndle.com/api/v1/laas/onboard-users' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer ACCESS_TOKEN'\
--data-raw

‘
{ "users": [
    {
        "userId": "f0c8c81d-13d3-4515-b40f-711ef91de094",
        "userData":
        {
            "name": "User1",
            "otherInfo": "goes here",
            "additionalInfo1": "goes here",
            "additionalInfo2": "goes here",
            "note": "you can add any key as much as you want to save on user"
        }
    },
    {
        "userId": "65433e42-a68f-48dc-89fa-1f523df7af87",
        "userData":
        {
            "name": "User5",
            "otherInfo": "goes here 5",
            "additionalInfo1": "goes here 5",
            "additionalInfo2": "goes here 5",
            "note": "you can add any key as much as you want to save on user 5"
        }
    }
]
}’
```

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "message": "request received successfully"
  }
  ```

  ```json Error 400 theme={null}
  {
    "status": "failed",
    "message": "invalid data provided",
    "data": {
      "errorType": "invalid",
      "appErrorCode": "Bad request",
      "error": "\"users[0].userId\" must be a valid GUID"
    }
  }
  ```

  ```bash WEBHOOK FORMAT theme={null}
  Success
  {
    "event": "USER_ONBOARDING",
    "status": "success",
    "failed": []
  }

  {"user":"4d7b55c0-716e-4db1-8c01-91f5922746b4","reason":"duplicate key value violates unique constraint \"UQ_e38c53eed7cc80d27d280388381\""} ] }
  ```
</ResponseExample>
