Skip to main content

nBold Collaboration Process API (1.3.0)

Download OpenAPI specification:Download

🚀 Get started

The nBold API provides a unified programmability model that you can use to manage your collaboration environment such as Microsoft Teams and build powerful apps easily.

Key features:

  • Create powerful self-service templates for Microsoft Teams
  • Deploy Microsoft Planner at scale with plans templates
  • Create a custom approval process for your teams provisioning requests
  • Apply automaticaly governance policies across all your teams
  • Integrate a custom in-house and LoB apps with Microsoft Teams

▶️ Using Postman

You can use a Postman collection to get started with the nBold API in minutes:

  1. Download and register for Postman.
  2. Choose File | Import ....
  3. Select Import From Link.
  4. Paste the following URL and choose Import.
https://assets.nbold.io/api/nbold-api-openapi-latest.yaml

🔐 Authentication

To access the nBold API, a valid Azure Active Directory access token is required, as a user or as an application.

Supported access tokens

The nBold API expects a valid access token in the HTTP Authorization request header with a bearer token such as:

{
  "Authorization": "bearer <JWT_TOKEN>"
}

nBold supports access tokens retreived from the following OAuth 2.0 grant flows:

Required roles

The nBold API implements role-based access control for each operation:

Role Code Origin
Anonymous Access ANONYMOUS_ACCESS nBold
End-User AUTHENTICATED_USER nBold
Authorized App AUTHORIZED_APP nBold
Catalog Manager CATALOG_MANAGER nBold
Governance Manager GOVERNANCE_MANAGER nBold
Compliance Manager COMPLIANCE_MANAGER nBold
Integration Manager INTEGRATION_MANAGER nBold
Change Manager CHANGE_MANAGER nBold
Teams Service Administrator TEAMS_SERVICE_ADMIN Microsoft 365
Global Administrator GLOBAL_ADMIN Microsoft 365

Each operation in this documentation specifies its required roles (You'll need at least ONE of them) through the x-nbold-required-roles extension.

⛔ Rate limits

The nBold API allows you to access data and to perform operations on multiple services. These services impose their own rate limits that affect applications that use nBold API to access them.

Overview of rate limit tiers

Rate limits are defined as "tiers" applied on a "per user (or app) per tenant" basis.

⚠️ The specific limits described here are subject to change.

Tier Code Limit Window
Tier 1 tier1 6 1 minute
Tier 2 tier2 20 1 minute
Tier 3 tier3 60 1 minute

Each operation in this documentation specifies its rate limits as a tier through the x-nbold-rate-limit extension.

What happens when your is exceeding a limit?

When a threshold is exceeded, nBold API limits any further requests from that client for a period of time. When throttling occurs, nBold API returns HTTP status code 429 (Too many requests), and the requests fail.

Throttling limits the number of concurrent calls to a service to prevent overuse of resources. nBold API is designed to handle a high volume of requests. If an overwhelming number of requests occurs, throttling helps maintain optimal performance and reliability of the nBold API service.

Throttling limits vary based on the scenario. For example, if you are performing a large volume of writes, the possibility for throttling is higher than if you are only performing reads.

nBold API is conforming to the IETF ratelimit standardization proposal.

💡 Note: Throttling behavior can depend on the type and number of requests. For example, if you have a high volume of requests, all requests types are throttled. Threshold limits vary based on the request type. Therefore, you could encounter a scenario where writes are throttled but reads are still permitted.

Common throttling scenarios

The most common causes of throttling of clients include:

  • A large number of requests across all applications in a our environments.
  • A large number of requests from a particular application across all environments.

Best practices to avoid throttling

Programming patterns like continuously polling a resource to check for updates and regularly scanning resource collections to check for new or deleted resources are more likely to lead to applications being throttled and degrade overall performances.

Before any throttling, nBold API provides two useful headers included in every responses so that you can monitor your own activity level:

  • X-RateLimit-Limit: The limit of requests in a perdiod of time (aka "window")
  • X-RateLimit-Remaining: The current number of requests that could be made during the current window.

Best practices to handle throttling

The following are best practices for handling throttling:

  • Reduce the number of operations per request.
  • Reduce the frequency of calls.
  • Avoid immediate retries, because all requests accrue against your usage limits.

When you implement error handling, use the HTTP error code 429 to detect throttling. The failed response includes the Retry-After response header. Backing off requests using the Retry-After delay is the fastest way to recover from throttling because nBold API continues to log resource usage while a client is being throttled.

  1. Wait the number of seconds specified in the Retry-After header.
  2. Retry the request.
  3. If the request fails again with a 429 error code, you are still being throttled. Continue to use the recommended Retry-After delay and retry the request until it succeeds.

💡 Note: If no Retry-After header is provided by the response, we recommend implementing an exponential backoff retry policy.

In addition to the Retry-After header, nBold API includes X-RateLimit-Limit and X-RateLimit-Remaining infos in body of the throttled response:

{
  message: 'Too many requests, please try again later...',
  rateLimitExceeded: {
    tier: 'Tier 1',              # Could be 'Tier 1', 'Tier 2' or 'Tier 3'
    rateLimitWindow: 900000,     # In ms
    rateLimitMax: 6              # In # of requests
  }
}

🔥 Errors

While your application should handle all error responses (in the 400 and 500 ranges), pay special attention to certain expected errors and responses, listed in the following table.

Topic HTTP code Best practice
User does not have access 403 If your application is up and running, it could encounter this error even if it has been granted the necessary permissions. In this case, it's most likely that the signed-in user or virtual app does not have privileges to access the resource requested. Your application should provide a generic "Access denied" error back to the signed-in user.
Not found 404 In certain cases, a requested resource might not be found. For example a resource might not exist, because it has not yet been provisioned or because it has been deleted.
Throttling 429 APIs might throttle at any time for a variety of reasons, so your application must always be prepared to handle 429 responses. This error response includes the Retry-After field in the HTTP response header. Backing off requests using the Retry-After delay is the fastest way to recover from throttling. For more information, see the Rate-limit article.
Service unavailable 503 This is likely because the services is busy. You should employ a back-off strategy similar to 429. Additionally, you should always make new retry requests over a new HTTP connection.

Reliability and support

To ensure reliability and facilitate support for your application, generate a unique GUID and send it on each nBold API REST request. This will help nBold investigate any errors more easily if you need to report an issue with nBold API. To do so, on every request to nBold API, generate a unique GUID, send it in the client-request-id HTTP request header, and also log it in your application's logs.

🔢 Versions

The nBold API currently supports two versions: v1.0 and beta.

API v1.0

nBold API under the v1.0 endpoint (under https://api.salestim.io/api/v1.0) are in general availability (GA) status. Note: Updates to APIs on this endpoint are additive in nature and should not break existing app scenarios.

💡 Recommendation: Use v1.0 APIs for your production apps.

API Beta

nBold API under the beta endpoint (under https://api.salestim.io/api/beta) includes APIs that are currently in preview. Because we might introduce breaking changes to our beta APIs, we recommend that you use the beta version only to test apps that are in development.

⚠️ Warning: Do NOT use beta APIs in your production apps.

Teams

Manage teams from your Microsoft Teams environment.

Create a new team based on a template.

Create a new Microsoft Teams team based on a template from your catalog.

Team name limits

Team name length should be less than 256 characters long.
If you're using a naming convention for the team name, this limit applies to the generated team name.

⚠️ N.B: If you're using emojis in your team name, each emoji may count for more than one character.

Team description limits

Team description length should be less than 1024 characters long.
If you're using a naming convention for the team description, this limit applies to the generated team deascription.

⚠️ N.B: If you're using emojis in your team description, each emoji may count for more than one character.

Team mail nickname limits

Team mail nickname length should be less than 64 characters long.
If you're using a naming convention for the team mail nickname, this limit applies to the generated team mail nickname after sanitization.

💡 This operation tries to automatically sanitize the group mailNickname property accordingly to the RFC 5321 and RFC 6530 specifications by applying the following steps (sensitive to order):

  1. Trimming (removing leading and trailing whitespaces)
  2. Switch to lower case
  3. Replace any of these charecters ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆÍÌÎÏŇÑÓÖÒÔÕØŘŔŠŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇíìîïňñóöòôõøðřŕšťúůüùûýÿžþÞĐđßÆa·/_,:; respectively with AAAAAACCCDEEEEEEEEIIIINNOOOOOORRSTUUUUUYYZaaaaaacccdeeeeeeeeiiiinnooooooorrstuuuuuyyzbBDdBAa------
  4. Remove any non alpha-numeric character (except for "-" and space)
  5. Collapse multiple whitespaces and replace them by a single one
  6. Collapse multiple dashes and replace them by a single one

Monitoring a provisioning job

⚠️ As the provisioning process is a long-running job, to avoid timeouts, this operation returns a job object that you can use to monitor the execution of the operation.
To monitor the progress and result of this job, you can either:

  • Monitor the job state using the GetJob operation
  • Create a webhook subscription to receive specific events during and/or at the end of the job run, using the CreateWebhook operation
nbold-rate-limit: tier1
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamProvisioningRequest object describing the job to execute.

object (Team template)

The template to be applied to the created team

object (Team request)

Characteristics of the team to be created

metadata
object (Artifact metadata)

Metadata associated with an artifact.

on_behalf_of
string (User ID)

An Azure Active Directory user ID, that will be treated as the requester when the request is actually sent by a service account or an app.

Responses

Request samples

Content type
application/json
Example
{
  • "template": {
    },
  • "team": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "string",
  • "state": "completed",
  • "progress": 100,
  • "data": { }
}

Get a team

Get detailed information about a team.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "id": "string",
  • "createdDateTime": "string",
  • "displayName": "string",
  • "description": "string",
  • "internalId": "string",
  • "classification": "string",
  • "specialization": "string",
  • "visibility": "string",
  • "webUrl": "string",
  • "isArchived": true,
  • "isMembershipLimitedToOwners": true,
  • "discoverySettings": {
    },
  • "memberSettings": {
    },
  • "guestSettings": {
    },
  • "messagingSettings": {
    },
  • "funSettings": {
    }
}

Update a team

Update a team.

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Request Body schema: application/json

Supply a JSON representation of team object.

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Delete a team

Delete a team.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Archive a team

Archive a team.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Request Body schema: application/json

In the request, you may optionally include the shouldSetSpoSiteReadOnlyForMembers parameter in a JSON body. This optional parameter defines whether to set permissions for team members to read-only on the SharePoint Online site associated with the team. Setting it to false or omitting the body altogether will result in this step being skipped.

object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Unarchive a team

Unarchive a team.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Get team members

Get team members.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
[
  • { }
]

Add a team member

Add a team member.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Request Body schema: application/json

TeamMembershipPayload.

object (User)

User

role
required
string (Team Membership Role)

Team Membership Role (member/owner)

Responses

Request samples

Content type
application/json
{
  • "user": {
    },
  • "role": "string"
}

Response samples

Content type
application/json
{ }

Channels

Manage channels from your Microsoft Teams environment.

Get team channels

Get team channels.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new team channel

Create a new Microsoft Teams team channel.

Team channel limits

A team channel length should be less than 50 characters long.

⚠️ N.B: If you're using emojis in your channel name, each emoji may count for more than one character.

💡 This operation tries to automatically sanitize the channel displayName property accordingly to the Microsoft Teans limits specification by applying the following steps (sensitive to order):

  1. Trimming (removing leading and trailing whitespaces)
  2. Remove forbidden words
  3. Remove invalid characters
  4. Collapse multiple whitespaces and replace them by a single one
  5. Collapse multiple dashes and replace them by a single one
nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Request Body schema: application/json

A TeamChannelPayload object describing the channel to create.

object (Team Channel Payload)

Payload of a Microsoft Teams team channel to be created/updated.

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "string",
  • "createdDateTime": "string",
  • "displayName": "string",
  • "description": "string",
  • "membershipType": "string"
}

Get the primary channel of a team

Get the primary channel of a team.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "createdDateTime": "string",
  • "displayName": "string",
  • "description": "string",
  • "membershipType": "string"
}

Messages

Manage messages from your Microsoft Teams environment.

send message

send a message to the specified channel

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

Request Body schema: application/json

Supply a JSON representation of your message from and body field required.

messageType
string
subject
string
summary
string
chatId
string
importance
string
locale
string
policyViolation
string
object
object
object
attachments
Array of any
mentions
Array of any
reactions
Array of any

Responses

Request samples

Content type
application/json
{
  • "messageType": "string",
  • "subject": "string",
  • "summary": "string",
  • "chatId": "string",
  • "importance": "string",
  • "locale": "string",
  • "policyViolation": "string",
  • "from": {
    },
  • "body": {
    },
  • "channelIdentity": {
    },
  • "attachments": [
    ],
  • "mentions": [
    ],
  • "reactions": [
    ]
}

Response samples

Content type
application/json
{
  • "odata.context": "string",
  • "id": "string",
  • "replyToId": "string",
  • "etag": "string",
  • "messageType": "string",
  • "createdDateTime": "string",
  • "lastModifiedDateTime": "string",
  • "lastEditedDateTime": "string",
  • "deletedDateTime": "string",
  • "subject": "string",
  • "summary": "string",
  • "chatId": "string",
  • "importance": "string",
  • "locale": "string",
  • "webUrl": "string",
  • "policyViolation": "string",
  • "eventDetail": "string",
  • "from": {
    },
  • "body": {
    },
  • "channelIdentity": {
    },
  • "attachments": [
    ],
  • "mentions": [
    ],
  • "reactions": [
    ]
}

Tabs

Manage tabs from your Microsoft Teams environment.

Get team channel tabs

Get team channel tabs.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The team channel ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new team channel tab

Create a new team channel tab.

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The team channel ID.

Request Body schema: application/json

A TeamChannelTabPayload object describing the tab to create.

object (Team Channel Tab Payload)

Payload of a Microsoft Teams team channel tab to be created/updated.

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "id": "string",
  • "displayName": "string",
  • "configuration": {
    },
  • "teamsApp": {
    },
  • "sortOrderIndex": "string",
  • "webUrl": "string"
}

Users

Manage users from your Microsoft 365 environment.

Retreive users from your Microsoft 365 environment

Retreive users from your Microsoft 365 environment.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Sensitivity Labels

Manage your Microsoft 365 sensitivity labels.

Get my sensitivity labels

Get my Microsoft 365 sensitivity labels.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHENTICATED_USER"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Templates catalog

Manage your corporate catalog of templates and governance policies for your collaboration platform.

The corporate catalog contains your own private templates, accessible to your end-users, that includes your custom governance policies, such as:

  • Naming conventions
  • Audience targeting
  • Approval rules
  • Security automation
  • Sensitivity labels

Templates are at the core of the nBold platform. As a rule of thumb, templates are a combination of two elements:

  • A team template, describing the structure and contents of a team.
  • A governance policy that may include security and compliance rules.

A template may be created by yourself and saved in your private corporate catalog for internal use. We call this kind of template Catalog Template.

See How to create a new template.

Get teams templates

Get all the teams templates accessible in your organization.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","CATALOG_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Get a Microsoft Teams team template

Get a Microsoft Teams team template by its ID

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

Responses

Response samples

Content type
application/json
{
  • "templateConfiguration": {
    },
  • "clonedTeam": {
    },
  • "newTeam": {
    }
}

Set a Microsoft Teams team template

Set a Microsoft Teams team template by its ID

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","CATALOG_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

Request Body schema: application/json

A JSON representation of a Microsoft Teams team template.

object

Information about the template and its related policies

object

Properties of the source team that should be cloned.

object

Properties of the new team that will be created by the provisioning job.

Responses

Request samples

Content type
application/json
{
  • "templateConfiguration": {
    },
  • "clonedTeam": {
    },
  • "newTeam": {
    }
}

Response samples

Content type
application/json
{
  • "templateConfiguration": {
    },
  • "clonedTeam": {
    },
  • "newTeam": {
    }
}

Get permanent members and owners of a Microsoft Teams team template

Get permanent members and owners of a Microsoft Teams team template

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

Responses

Response samples

Content type
application/json
{
  • "members": [
    ],
  • "owners": [
    ]
}

Set permanent members and owners of a Microsoft Teams team template

Set permanent members and owners of a Microsoft Teams team template

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","CATALOG_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

Request Body schema: application/json

A JSON representation of a Microsoft Teams team template permanent membership settings.

Array of objects (Permanent Members)

Members of a permanent membership team, as an array of PermanentMember.

Array of objects (Permanent Members)

Members of a permanent membership team, as an array of PermanentMember.

Responses

Request samples

Content type
application/json
{
  • "members": [
    ],
  • "owners": [
    ]
}

Response samples

Content type
application/json
{
  • "members": [
    ],
  • "owners": [
    ]
}

Get permanent members and owners of a Microsoft Teams team template

Get permanent members or owners of a Microsoft Teams team template

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

role
required
string

The Microsoft Teams ownership role (owners / members)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Set permanent members and owners of a Microsoft Teams team template

Set permanent members or owners of a Microsoft Teams team template

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","CATALOG_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The Microsoft Teams team template ID

role
required
string

The Microsoft Teams ownership role (owners / members)

Request Body schema: application/json

A JSON representation of a Microsoft Teams team template permanent members.

Array
id
string (ID)

User ID (From Active Directory)

name
string (Name)

User Display Name (From Active Directory)

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Get my teams templates

Get teams templates accessible to the connected user filtered by the audience targeting rules.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHENTICATED_USER"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Connected Apps

Connected apps automation solutions

Get all solution instances

Get all solution instances by externalUserId

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply a JSON with an external user id.

externalUserId
string

Connected Apps external user ID

Responses

Request samples

Content type
application/json
{
  • "externalUserId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Delete a solution instance by solutionInstanceId

Delete a solution instance by solutionInstanceId

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply a JSON with an Solution instance id and a user access token.

solutionInstanceId
string

solution instance id

userAccessToken
string

user access token

Responses

Request samples

Content type
application/json
{
  • "solutionInstanceId": "string",
  • "userAccessToken": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update a solution instance

Update a solution instance by solutionInstanceId

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply a JSON with solutionInstanceId, userAccessToken, instanceName.

solutionInstanceId
string

solution instance id

userAccessToken
string

user access token

instanceName
string
enabled
boolean
Array of objects
Array of objects

Responses

Request samples

Content type
application/json
{
  • "solutionInstanceId": "string",
  • "userAccessToken": "string",
  • "instanceName": "string",
  • "enabled": true,
  • "configValues": [
    ],
  • "authValues": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Upgrade a solution instance

Upgrade a solution instance by solutionInstanceId

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply a JSON with solutionInstanceId, userAccessToken, instanceName.

solutionInstanceId
string

solution instance id

userAccessToken
string

user access token

Responses

Request samples

Content type
application/json
{
  • "solutionInstanceId": "string",
  • "userAccessToken": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Remote Objects

Remote objects from your connected apps

Send a remote object updated event

Send an event when a remote object is updated.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply a JSON representation of your query.

remote_system
string

Remote system owning the remote object, such as salesforce_sales_cloud or hubspot

update_type
string
Enum: "created" "updated" "deleted"

Type of event that triggered the remote object update

object_type
string

Type of object from the remote system, such as account or opportunity

object_properties
object

Properties of the object from the remote system. Should especially include its id

Array of objects (Linked artifact)

Array of linked artifacts from the collaboration platform

Responses

Request samples

Content type
application/json
Example
{
  • "remote_system": "salesforce",
  • "update_type": "updated",
  • "object_type": "opportunity",
  • "object_properties": {
    }
}

Response samples

Content type
application/json
{ }

Templating

Templating utilities used for dynamic naming conventions, adaptive cards generation, based on EJS templates.

💡 In addition to standard Javascript operations, the templating engine can use the following third-party modules for advanced operations:

Execute a template against data

Execute an arbitrary EJS template against some provided data.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
Request Body schema: application/json

Supply an EJS template string and a data payload.

template
string

Template to execute

data
object

Data to use during templating

Responses

Request samples

Content type
application/json
Example

Basic string interpolation

{
  • "template": "Hello <%= firstName %>!",
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "result": {
    }
}

Execute a template by its ID against data

Execute a template against some provided data.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
template_id
required
string

The template ID

Request Body schema: application/json

Supply a template ID and a data payload.

data
object

Data to use during templating

Responses

Request samples

Content type
application/json
{
  • "data": { }
}

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "result": {
    }
}

Metadata

Associate rich metadata to your collaboration platform artifacts such as teams, channels, messages...

Query metadata

Query metadata for a specific namespace.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your query.

object

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
[
  • {
    }
]

Get a team metadata

Get metadata for a team for a specific namespace.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

namespace
required
string

The metadata namespace.

Responses

Response samples

Content type
application/json
{ }

Set team metadata

Set team metadata for a specific namespace. N.B Using the PUT method will replace all pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Update a team metadata

Update a team metadata for a specific namespace. N.B Using the PATCH method will merge supplied body with pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Get a channel metadata

Get metadata for a channel for a specific namespace.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

namespace
required
string

The metadata namespace.

Responses

Response samples

Content type
application/json
{ }

Set channel metadata

Set channel metadata for a specific namespace. N.B Using the POST method will replace all pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Update a channel metadata

Update a channel metadata for a specific namespace. N.B Using the PATCH method will merge supplied body with pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Get a message metadata

Get metadata for a message for a specific namespace.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

message_id
required
string

The message ID.

namespace
required
string

The metadata namespace.

Responses

Response samples

Content type
application/json
{ }

Set message metadata

Set message metadata for a specific namespace. N.B Using the POST method will replace all pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

message_id
required
string

The message ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Update a message metadata

Update a message metadata for a specific namespace. N.B Using the PATCH method will merge supplied body with pre-existing metadata.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GOVERNANCE_MANAGER","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
team_id
required
string

The team ID.

channel_id
required
string

The channel ID.

message_id
required
string

The message ID.

namespace
required
string

The metadata namespace.

Request Body schema: application/json

Supply a JSON representation of your metadata.

object (Namespace Metadata)

Namespace metadata for collaboration process artifact.

Responses

Request samples

Content type
application/json
Example
{
  • "crm_opportunity_id": 123
}

Response samples

Content type
application/json
{ }

Approvals

Manage your team creation requests approvals workflows.

Approve a team creation request

Approve a team creation request.

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
oauth2_auth
path Parameters
request_id
required
string

The approval request ID.

Request Body schema: application/json

An ApprovedApprovalResponsePayload object.

object

Approver of the request

message
string

Message to be sent to the requester.

object

Updates made by the approver

Responses

Request samples

Content type
application/json
{
  • "approver": {
    },
  • "message": "string",
  • "updates": {
    }
}

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Reject a Team Creation Request

Reject a team creation request.

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
oauth2_auth
path Parameters
request_id
required
string

The ID of the approval request you want to reject.

Request Body schema: application/json

An RejectTeamCreationRequestBody object.

object

Approver of the request

message
string

Message to be sent to the requester.

Responses

Request samples

Content type
application/json
{
  • "approver": {
    },
  • "message": "string"
}

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}

Webhooks

Webhooks enable organizations to trigger automated operations outside of the nBold platform, such as in a custom application, or in an automation tool such as Microsoft Power Automate, Azure Logic Apps or Zapier.

⚠️ Note:
Due to the fact that data may be exchanged outside of your Microsoft 365 environment, webhooks have to be considered as highly sensitive. To protect these operations, the nBold platform controls webhooks management through RBAC, making any operation related to webhooks accessible only to users granted with one of the following roles:

  • Global admin (Microsoft 365) role
  • Teams service admin (Microsoft 365) role
  • Integration Manager (nBold) role

Anatomy of a Webhook

A wehbook is defined by the following properties:

{
  "id": "7f105c7d-2dc5-4532-97cd-4e7ae6534c07", // {string} Webhook UUID automatically generated during its creation - ReadOnly
  "name": "Example Webhook", // {string} Webhook name - Read/Write
  "description": "This is a new webhook", // {string} Webhook description - Read/Write
  "active": true, // {boolean} Webhook status - Read/Write
  "events": [ // {array} Array of events codes that will trigger the webhook - Read/Write
    "team_provisioning_completed", // {string} Event code - Read/Write
    ...
  ],
  "config": { // {object} Webhook http configuration
    "verb": "post", // {string} Http verb used by the the webhook - ReadOnly as currently only `post` is supported
    "url": "https://example.com/webhook", // {string} Target URL of the webhook - Read/Write
    "content_type": "json", // {string} Http content-type used by the webhook - ReadOnly as currently only `json` (matching to `application/json`) is supported
    "secret":"secretClientValue" // {string} Secret value used to authentify the wehbook emitter by the consumer - Read/Write
  }
}

Anatomy of a Request

When triggered, the webhook generates an http POST request to its configured url.

Headers

The following headers are included in the request:

{
  "X-nBold-Webhook": "", // {string} UUID of the webhook that triggered the request.
  "X-nBold-Event": "", // {string} Code of the event that triggered the request.
  "X-nBold-Delivery": "", // {string} An automatically generated UUID to identify the request.
  "X-nBold-Signature": "" // {string} This header is sent if the webhook is configured with a secret.
}

Payload

A webhook payload contains at least the following properties:

{
  "@odata.context": "https://docs.nbold.co/api/webhooks", // {string} Link to the webhook online help
  "tenant": {
    "id": "" // {string} The tenant ID from where the event originates
  }
}

User-Agent

The User-Agent for the requests will have the prefix nBold-Webhook/ and include the nBold current version number.
For instance nBold-Webhook/2.1.193

Endpoints Requirements

Security

Your endpoint must be an HTTPS URL with a valid SSL certificate that can correctly process event notifications.

Responses

The expected success response codes from the target endpoint are 200, 201, 202. If any other code is received, our webhook engine will retry the request following this retry policy:

MAX_RETRY = 2 // Maximum number of retry before flagging the delivery as `failed`
RETRY_INTERVAL = 10000 // Number of milliseconds between each retry

Verifying Webhooks

Webhooks sent by nBold can be verified by calculating a digital signature. If a secret has been defined, the webhook requests will includes a X-nBold-Signature header.
To verify that the request came from nBold, compute the HMAC hex digest of the request body, generated using the SHA-256 hash function and the secret as the HMAC key. If they match, then you can be sure that the webhook was sent from nBold.

Here are a comprehensive list of examples for multiple languages:

Node

const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'secret');
hmac.update('Message');
console.log(hmac.digest('hex'));

PHP

<?php
echo hash_hmac('sha256', 'Message', 'secret');
?>

Java

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class Test {
  public static void main(String[] args) {
  try {
      String secret = "secret";
      String message = "Message";

      Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
      SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
      sha256_HMAC.init(secret_key);

      byte[] hash = (sha256_HMAC.doFinal(message.getBytes()));
      StringBuffer result = new StringBuffer();
      for (byte b : hash) {
        result.append(String.format("%02x", b)); 
      }
      System.out.println(result.toString());
    }
    catch (Exception e){
      System.out.println("Error");
    }
  }
}

C#

using System.Security.Cryptography;

namespace Test
{
  public class MyHmac
  {
    public static void Main(string[] args){
      var hmac = new MyHmac ();
      System.Console.WriteLine(hmac.CreateToken ("Message", "secret"));
    }
    private string CreateToken(string message, string secret)
    {
      secret = secret ?? "";
      var encoding = new System.Text.ASCIIEncoding();
      byte[] keyByte = encoding.GetBytes(secret);
      byte[] messageBytes = encoding.GetBytes(message);
      using (var hmacsha256 = new HMACSHA256(keyByte))
      {
        byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

        var sb = new System.Text.StringBuilder();
        for (var i = 0; i <= hashmessage.Length - 1; i++)
        {
          sb.Append(hashmessage[i].ToString("x2"));
        }
        return sb.ToString();
      }
    }
  }
}

Go

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func ComputeHmac256(message string, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return hex.EncodeToString(h.Sum(nil))
}

func main() {
    fmt.Println(ComputeHmac256("Message", "secret"))
}

Ruby

require 'openssl'
OpenSSL::HMAC.hexdigest('sha256', "secret", "Message")

Python (3.x)

import hashlib
import hmac

KEY = "secret"
KEY_BYTES=KEY.encode('ascii')
MESSAGE = "Message"
MESSAGE_BYTES=MESSAGE.encode('ascii')
result = hmac.new(KEY_BYTES, MESSAGE_BYTES, hashlib.sha256).hexdigest()

print (result)

Get webhooks events

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Delete a webhook subscription

Delete a webhook subscription.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
webhook_id
required
string

ID of the webhook to be deleted.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Generate a signature from a secret and a webhook payload

Generate a signature from a secret and a webhook payload.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A HookSignatureRequest object comprised of the secret and payload.

secret
required
string

Webhook secret

payload
required
object

Webhook payload

Responses

Request samples

Content type
application/json
{
  • "secret": "string",
  • "payload": { }
}

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "signature": "string"
}

Get webhook subscriptions

Get webhook subscriptions.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Create a new webhook subscription

Create a new webhook subscription.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A HookPayload object.

name
string

Webhook name

description
string

Webhook description

events
required
Array of strings (Webhook events)
Items Enum: "team_creation_approval_requested" "team_creation_approved" "team_creation_rejected" "team_created" "team_provisioning_completed" "remote_object_updated" "trello_tab_cloned"

Webhook events

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "events": [
    ],
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
Content type
application/json
{
  • "tenant": {
    },
  • "requester": {
    },
  • "approval": {
    },
  • "template": {
    },
  • "request": {
    },
  • "provisioning": {
    }
}

Subscriptions

Subscribe to events from your collaboration platform and connected apps

When a Team Creation Approval is Requested

When a team creation approval is requested.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamCreationApprovalRequestedRequestBody object.

name
required
string
Default: "When a Team Creation Approval is Requested"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Team Creation Approval is Requested",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: team_creation_approval_requested
Content type
application/json
{
  • "tenant": {
    },
  • "requester": {
    },
  • "approval": {
    },
  • "template": {
    },
  • "request": {
    }
}

When a Team Creation is Approved

When a team creation is approved.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamCreationApprovalApprovedRequestBody object.

name
required
string
Default: "When a Team Creation is Approved"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Team Creation is Approved",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: team_creation_approved
Content type
application/json
{
  • "tenant": {
    },
  • "requester": {
    },
  • "approval": {
    },
  • "template": {
    },
  • "request": {
    },
  • "provisioning": {
    }
}

When a Team Creation is rejected

When a team creation is rejected.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamCreationApprovalApprovedRequestBody object.

name
required
string
Default: "When a Team Creation is rejected"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Team Creation is rejected",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: team_creation_rejected
Content type
application/json
{
  • "tenant": {
    },
  • "requester": {
    },
  • "approval": {
    },
  • "template": {
    },
  • "request": {
    }
}

When a Team is created

When a team is created.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamCreatedRequestBody object.

name
required
string
Default: "When a Team is created"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Team is created",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: team_created
Content type
application/json
{
  • "tenant": {
    },
  • "team": {
    }
}

When a Team provisioning is completed

When a team provisioning is completed.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamProvisioningCompleted object.

name
required
string
Default: "When a Team provisioning is completed"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Team provisioning is completed",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: team_provisioning_completed
Content type
application/json
{
  • "tenant": {
    },
  • "team": {
    },
  • "requester": {
    },
  • "template": {
    },
  • "metadata": { }
}

When a remote object is updated

When a remote object is updated.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A RemoteObjectUpdatedSubscriptionRequestBody object.

name
required
string
Default: "When a remote object is updated"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a remote object is updated",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: remote_object_updated
Content type
application/json
{
  • "remote_system": "string",
  • "update_type": "created",
  • "object_type": "string",
  • "object_properties": { },
  • "linked_artifacts": [
    ]
}

When a Trello tab is cloned by the provisioning process

When a Trello tab is cloned by the provisioning process.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
Request Body schema: application/json

A TeamCreatedSubscriptionRequestBody object.

name
required
string
Default: "When a Trello tab is cloned"

Name

description
required
string
Default: "Created from Power Automate / Logic Apps"

Webhook description

required
object

Webhook configuration

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "When a Trello tab is cloned",
  • "description": "Created from Power Automate / Logic Apps",
  • "config": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "events": [
    ],
  • "config": {
    }
}

Callback payload samples

Callback
POST: trello_tab_cloned
Content type
application/json
{
  • "tenant": {
    },
  • "team": {
    },
  • "channel": {
    },
  • "tab": {
    }
}

Reports

Access reports from your collaboration platform.

Get reports categories

Get reports categories

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","GOVERNANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get reports

Get reports

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","GOVERNANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get report secure URL

Get report secure URL

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","GOVERNANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
resource_type
required
string

The resource type (dashboard / question).

resource_id
required
string

The resource id.

Responses

Response samples

Content type
application/json
{
  • "url": "string"
}

Audit Trails

Access audit trails from your collaboration platform.

Get audit trails

Get all the audit trails accessible in your organization. TIER 3 | ROLES - AUTHORIZED_APP, COMPLIANCE_MANAGER, TEAMS_SERVICE_ADMIN, GLOBAL_ADMIN.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Get all the records from an audit trail

Get all the records from an audit trail.

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","COMPLIANCE_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
bearer_auth
path Parameters
code
required
string

The audit trail code.

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Jobs

Manage jobs that performs governance operations in your collaboration platform.

Jobs are governance tasks executed by the nBold Platform automation engine. They can be requested by the nBold administrators, catalog managers and virtual apps, to perform powerful operations such as:

  • Provision a new team based on a template
  • Apply governance policies to multiple teams
  • Automatically archive teams based on a specific rule

Get information about a job

Get detailed information about a job, including its status, progress, logs...

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
job_id
required
string

The job ID.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "string",
  • "state": "completed",
  • "progress": 100,
  • "data": { }
}

Get logs from a job

Get logs from a job, as an array of JobLogsEntry

nbold-rate-limit: tier2
nbold-required-roles: ["AUTHORIZED_APP","AUTHENTICATED_USER"]
Authorizations:
bearer_auth
path Parameters
job_id
required
string

The job ID.

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "@odata.count": 0,
  • "value": [
    ]
}

Connectivity

Connectivity endpoints.

Test Connection to the nBold API

Test connection to the nBold API. Used by automation platforms such as Microsoft Azure Logic Apps and Microsoft Power Automate.

nbold-rate-limit: tier3
nbold-required-roles: ["AUTHORIZED_APP","INTEGRATION_MANAGER","TEAMS_SERVICE_ADMIN","GLOBAL_ADMIN"]
Authorizations:
oauth2_auth

Responses

Response samples

Content type
application/json
{
  • "@odata.context": "string",
  • "error": {
    }
}