---
title: "Create bundle for project"
method: POST
path: "/v1/projects/{projectId}/bundles"
tags: ["Bundles"]
---

# Create bundle for project

`POST /v1/projects/{projectId}/bundles`

Creates a new bundle of resources based on the input work order.

## Path parameters

- `projectId` string, required

## Request body

- BundlesInputBundlesDto
  - `name` string — Name of bundle to create. If a name is not specified in the resource blocks then they will be created with this name.
  - `region` 'BR' | 'EU' | 'US', required — Region to create resources in. (Allowed values for staging environment: `EU` or `US`).
  - `subproject` union — Subproject resource block. If set to true, a subproject will be created under the provided projectId with default name from the root object. Optionally a different name can be specified as well as labels on the project. If not provided or set to false, a subproject will not be created and instead all resources will be created under the projectId provided in the request.
    - object
      - `name` string — Name of subproject to create. If not set, will use `name` from root object. If neither this value or the `name` in the root is set, then the request will fail.
      - `labels` object — Optional labels to attach to the subproject. If provided must be an object with string keys and string values.
    - boolean — Set to `true` to use default values. Set to `false` or omit to not create a subproject.
  - `smsApp` union — SMS Application resource block. If set to true, an SMS Application will be created under the project or subproject specified. Optionally a different name can specified. If not provided or set to false, an SMS Application will not be created.
    - object
      - `test` boolean — Deprecated. This field is no longer used and will be removed in a future release.
      - `name` string — Name of SMS App to create. If not set, will use `name` from root object. If neither this value or the `name` in the root is set, then the request will fail.
    - boolean — Set to `true` to use default values. Set to `false` or omit to not create an SMS app.
  - `convApp` union — Conversation Application resource block. If set to true, a Conversation Application will be created under the project or subproject specified. All other resources created will be associated with the Conversation Application. Optionally a different name can specified as well as Conversation API webhooks. If not provided or set to `false`, a Conversation Application will not be created.
    - object
      - `name` string — Name of Conversation API App to create. If not set, will use `name` from root object. If neither this value or the `name` in the root is set, then the request will fail.
      - `webhooks` BundlesConversationAppWebhooksInputDto[] — Conversation API webhooks to create for the new App. See <a href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Webhooks/#tag/Webhooks/operation/Webhooks_CreateWebhook">Conversation API documentation</a> for all options.
        - `target` string, required — The target url where events should be sent to. The conversation-api.*.sinch.com subdomains are forbidden.
        - `triggers` string[], required — An array of triggers that should trigger the webhook and result in an event being sent to the target url.
        - `secret` string — Optional secret used to sign contents of webhooks sent by the Conversation API. You can then use the secret to verify the signature.
        - `targetType` 'DISMISS' | 'GRPC' | 'HTTP' — Conversation API webhook target type.
      - `processingMode` 'CONVERSATION' | 'DISPATCH' — Conversation API processing mode. May be changed later by using Conversation App API.
      - `retentionPolicy` union — Conversation API retention policy for messages and conversations. May be changed later by using Conversation App API.
        - object
          - `retentionPolicyType` 'CONVERSATION_EXPIRE_POLICY' | 'MESSAGE_EXPIRE_POLICY' | 'PERSIST_RETENTION_POLICY' — Conversation API conversation retention policy type.
          - `ttl` number — Conversation API conversation retention time in days.
        - object
          - `retentionPolicyType` 'MESSAGE_EXPIRE_POLICY' — Conversation API dispatch retention policy type.
          - `ttl` number — Conversation API dispatch retention time in days.
      - `consentManagerSettings` BundlesConversationAppConsentManagerSettingsInputDto
        - `mode` 'DISABLED' | 'PRIMARY' | 'SECONDARY', required — Conversation API consent manager settings mode.
    - boolean — Set to `true` to use default values. Set to `false` or omit to not create a Conversation API app.
  - `webhooks` BundlesWebhookInputDto[] — Webhook targets for the Provisioning API. Field 'target' must have unique values across items.
    - `target` string, url, required — A valid target url where events should be sent to.
    - `secret` string, required — Secret to be used to sign contents of webhooks sent by the provisioning API. You can then use the secret to verify the signature. Please not that secret should have a high entropy to be considered secure.
    - `triggers` string[], required — List of triggers you want to be notified about on your webhook. To be able to listen to all type of events use `ALL`. - Common: `ALL` - Bundles: `BUNDLE_DONE` - WhatsApp Sender: `WHATSAPP_SENDER_ACTIVE`, `WHATSAPP_SENDER_COMMENT_ADDED`, `WHATSAPP_SENDER_DAILY_LIMIT_CHANGED`, `WHATSAPP_SENDER_DELETED`, `WHATSAPP_SENDER_ERROR`, `WHATSAPP_SENDER_INACTIVE`, `WHATSAPP_SENDER_PENDING_VERIFICATION`, `WHATSAPP_SENDER_QUALITY_RATING_CHANGED`, `WHATSAPP_SENDER_REJECTED` or `WHATSAPP_SENDER_USERNAME_UPDATED` - WhatsApp Template: `WHATSAPP_TEMPLATE_APPROVED`, `WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE`, `WHATSAPP_TEMPLATE_CATEGORY_UPDATED`, `WHATSAPP_TEMPLATE_COMMENT_ADDED`, `WHATSAPP_TEMPLATE_DELETED`, `WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED`, `WHATSAPP_TEMPLATE_REJECTED` or `WHATSAPP_TEMPLATE_STATUS_UPDATED` - WhatsApp Account: `WHATSAPP_ACCOUNT_COMMENT_ADDED`, `WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED`, `WHATSAPP_ACCOUNT_ONBOARDED`, `WHATSAPP_ACCOUNT_PENDING_VERIFICATION`, `WHATSAPP_ACCOUNT_REJECTED` or `WHATSAPP_WABA_ACCOUNT_CHANGED` - RCS Sender: `RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED`, `RCS_SENDER_COMMENT_ADDED`, `RCS_SENDER_OPERATOR_STATUS_UPDATED` or `RCS_SENDER_STATUS_UPDATED` - KakaoTalk Sender: `KAKAOTALK_SENDER_ACTIVE`, `KAKAOTALK_SENDER_COMMENT_ADDED`, `KAKAOTALK_SENDER_INACTIVE` or `KAKAOTALK_SENDER_REJECTED` - KakaoTalk Template: `KAKAOTALK_TEMPLATE_APPROVED`, `KAKAOTALK_TEMPLATE_COMMENT_ADDED` or `KAKAOTALK_TEMPLATE_REJECTED`

## Response `201`

Responds with the bundle created. At time of response the bundle might not be completed. To receive the complete payload register a webhook for the `BUNDLE_DONE` trigger.

- BundlesBundlesDto
  - `id` string, required — Id of bundle created.
  - `projectId` string, required — The project or subproject id where resources have been created.
  - `name` string — Name of bundle created. If a name was not specified in the resource blocks then they were created with this name.
  - `state` 'DONE' | 'FAILED' | 'IN_PROGRESS', required — Current state.
  - `webhookDeliveryStatuses` BundlesWebhookDeliveryStatusDto[] — List delivery statuses for all BUNDLE_DONE webhooks.
    - `webhookId` string, required
    - `httpStatusCode` 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511, required
    - `errorMessage` string
    - `date` string, required
  - `region` 'BR' | 'EU' | 'US', required — Region resources were create in.
  - `subproject` BundlesSubprojectDto
    - `id` string, required — Subproject id.
    - `name` string, required — Name of Subproject.
    - `labels` object — Project labels, if provided.
    - `parentProjectId` string, required — Parent project id which the subproject is associated with.
    - `status` 'PENDING' | 'READY', required — Status of subproject.
  - `smsApp` BundlesBundlesSmsAppDto
    - `id` string, required — SMS App id.
    - `smsServiceId` string, required — Id of the SMS Service which the SMS App belongs to.
    - `name` string, required — Name of SMS App.
    - `status` 'ACTIVE' | 'BLOCKED' | 'DELETED' | 'DEPROVISIONING' | 'DEPROVISIONING_FAILED' | 'FAILED_ADD' | 'FAILED_BLOCK' | 'FAILED_DELETE' | 'FAILED_UNBLOCK' | 'FAILED_UPDATE' | 'IN_PROGRESS_ADD' | 'IN_PROGRESS_BLOCK' | 'IN_PROGRESS_DELETE' | 'IN_PROGRESS_UNBLOCK' | 'IN_PROGRESS_UPDATE' | 'PENDING_ADD' | 'PENDING_BLOCK' | 'PENDING_DELETE' | 'PENDING_UNBLOCK' | 'PENDING_UPDATE' | 'PROVISIONING' | 'PROVISIONING_ADD' | 'PROVISIONING_ADD_FAILED' | 'PROVISIONING_BLOCK' | 'PROVISIONING_BLOCK_FAILED' | 'PROVISIONING_FAILED' | 'PROVISIONING_UNBLOCK' | 'PROVISIONING_UNBLOCK_FAILED' | 'PROVISIONING_UPDATE' | 'PROVISIONING_UPDATE_FAILED' | 'STATUS_UNSPECIFIED' | 'UNRECOGNIZED', required — Status of SMS App.
    - `regions` string[], required — List of regions of the app.
    - `test` boolean, required — True if the app is a test app.
  - `convApp` BundlesConversationAppDto
    - `id` string, required — Conversation App id.
    - `name` string, required — Name of Conversation App.
    - `webhooks` BundlesConversationAppWebhooksDto[] — List all webhooks for a given app.
      - `id` string, required — The ID of the webhook.
      - `target` string, required — The target url where events should be sent to.
      - `triggers` string[], required — An array of triggers that should trigger the webhook and result in an event being sent to the target url.
      - `secret` string — Optional secret used to sign contents of webhooks sent by the Conversation API. You can then use the secret to verify the signature.
    - `processingMode` 'CONVERSATION' | 'DISPATCH' | 'UNRECOGNIZED' | 'UNSPECIFIED', required — Conversation API processing mode.
    - `retentionPolicy` BundlesConversationAppRetentionPolicyDto
      - `retentionPolicyType` 'CONVERSATION_EXPIRE_POLICY' | 'MESSAGE_EXPIRE_POLICY' | 'PERSIST_RETENTION_POLICY' | 'UNRECOGNIZED', required — Conversation API retention policy type.
      - `ttl` number — Conversation API retention time in days.
    - `consentManagerSettings` BundlesConversationAppConsentManagerSettingsDto
      - `mode` 'DISABLED' | 'PRIMARY' | 'SECONDARY' | 'UNRECOGNIZED', required — Conversation API consent manager settings mode.
    - `smsChannelStatus` 'ACTIVE' | 'FAILING' | 'PENDING' | 'UNRECOGNIZED' — Status of the SMS channel credentials integration.
  - `webhooks` BundlesWebhookDto[] — Webhooks registered, if requested.
    - `id` string, required — The ID of the webhook.
    - `target` string, required — The target url where events will be sent to.
    - `projectId` string, required — The project that this webhook belongs to.
    - `triggers` string[], required — List of triggers this webhook is triggered by.

## Other responses

- `400` — BadRequest
- `401` — Unauthorized
- `403` — Forbidden
- `404` — NotFound
- `409` — Conflict
- `424` — FailedDependency
- `500` — InternalServerError

---

[API](https://skmtc.net/sinch/apis/provisioning-api.md) · [All operations](https://skmtc.net/sinch/apis/provisioning-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sinch/provisioning-api/revisions/c78a716de420/schema)
