Pricing & FeaturesDocumentationBlog
Sign-inTry Buddy for free
  • Docs
  • API Docs
  • Getting Started
  • Overview

Documentation

.NET CoreAndroidAngularAureliaC/C++CI/CD for GoClojureDjangoElixirEmber.jsGatsbyHaskellHexoHugo
Certificates & profilesPipeline configuration
JavaJavaScriptJekyllMiddlemanNode.jsPHPPythonReact NativeReact.jsRubyScala
App RunnerAWS CLI / CDKCloudFormationCodeDeployCodePipelineEC2ECSElastic BeanstalkLambdaS3 / CloudFront
AzureCapistranoDigitalOceanDigitalOcean SpacesFTP/FTPSGit pullGit push
App EngineCloud RunCloud StorageFirebase CLIFunction
HerokuNetlifyRackspaceRsyncSFTPShopifyVultr
IntroductionBuilds & testingCacheConcurrency and parallelismConditional runsCustom actionsDB migrations & custom scriptsDeploymentsDuplicate & Export/ImportEnvironment variablesFoldersNotificationsParameterized pipelines
Private dependenciesSubmodulesDeploymentNode.js packagesComposer PHP packages
Secrets encryption
Predefined servicesCustom services
SSH keysStatus badgesTrigger pipeline actionTriggering pipelines
Linux VMMac VMWindows VM
CDN invalidationContinuous DeliveryContinuous DeploymentDaily integration testsDeployment pipelineLink validation pipelineMonitoring pipelinePull requests testingRelease after every tag pushRun tests after every pushSelenium testsSemantic versioning and settable variablesZero-downtime deployment
Build imagePush imageRun imageDocker in Docker
User managementUser RolesPipeline permissionsGroupsAdministratorsActivity streams
IntroductionWebhooksOIDC for pipelinesApp Store
ConfigurationRequired policiesOIDC
ConfigurationOIDC
BackblazeBitbucketBlackfireCloudflareDatadogDigitalOceanDigitalOcean SpacesDocker HubFirebaseGhost InspectorGitHubGitLab
ConfigurationRequired policiesOIDC
HerokuHoneybadgerLogglyNetlifyNew RelicOktaOneLoginPushbulletPushoverRackspaceRollbarSentryShopifySlackSnykStackHawk CLITelegramUpCloudVultr
SecurityBillingURL & Ownership
SSO in BuddyMandatory SSOGroup synchronization
GenericAWSAzureGoogleOktaOneLogin
GenericAWSAzureGoogleOktaOneLogin
AuthenticationCode editorBranchesCommits historyGit SSH keys
IntroductionRequirementsCLI
AWSAzureDigitalOceanLinuxmacOSUbuntuNon-interactive
BitbucketDigitalOceanDocker HubGitHubGitLabGoogle CloudHerokuMicrosoft AzureNetlifyPushbulletSentryShopifySlackTelegram
BackupDocker Hub pull limitLDAPMemoryNetwork portsSMS ServiceSMTP serverSSL certificatesTelemetryUpdates
Low storage spaceNo refresh in SafariReporting feedbackResetting licenseResetting workspace owner’s passwordShared memory (/dev/shm)Tunnel
ConfigurationPipelines
IntroductionSchemaVariablesTemplates
Amazon S3AWS App Runner DeployAWS App Runner MonitorAWS CDK CLIAWS CLIAWS CLI 2AWS CodeDeployAWS CodePipelineAWS ECSAWS Elastic BeanstalkAWS Elastic Beanstalk MonitoringAWS LambdaAWS Lambda DeployAzure CLIAzure StorageBackblaze B2BlackfireBugsnagBuild a Cordova AppBuild a Fastlane App (iOS)Build a React Native AppBuild Android AppBuild ApplicationBuild Docker ImageBuild Flutter AppBuild Flutter App (iOS / iOS)Build multi-arch imageClear CacheCloudflareCloudfrontCode sign and export an iOS appCompress imagesCopy filesCreate new sandboxDatadogDatadog Service CheckDeploy to App Store ConnectDigitalOceanDigitalOcean CDNDigitalOcean CLIDigitalOcean SpacesDiscordDockerDocker CLIDockerfile LinterDownload Backblaze B2Download from sandboxDownload FTPDownload FTPSDownload GCSDownload S3Download SFTPEmail notificationESlintFirebaseFTPFTPSGenerate variablesGhost InspectorGhost Inspector CLIGit PushGitcrypt lockGitcrypt unlockGitHub CLIGitHub ReleaseGitLab CLIGKE Apply DeploymentGKE Run JobGKE Run PodGKE Set ImageGoogle App EngineGoogle CDNGoogle ChatGoogle Cloud CLIGoogle Cloud RunGoogle Cloud StorageGoogle Compute EngineGoogle FunctionsGoogle Functions DeployHerokuHeroku CLIHoneybadgerHTTP RequestJMeter CLIKubernetes Apply DeploymentKubernetes kubectlKubernetes Run Helm CMDsKubernetes Run JobKubernetes Run PodKubernetes Set ImageLighthouseLink CheckerLinuxLogglyMacOSMicrosoft AzureMicrosoft TeamsNetlifyNew Relic CLIOperate sandboxPass argumentsPing MonitoringPublish Android AppPublish Bundle to Google PlayPush Docker imagePushbulletPushoverRackspaceRaygunReplaceRollbarRsyncRun Docker containerSentrySet variablesSFTPShopifyShopify CLISign Android AppSign BundleSlack NotificationSleepSMS NotificationSnykSplit testsSSH commandSSH to a sandboxSSL checkerStackHawk CLITCP MonitoringTelegram NotificationTerraform CLITheme Kit CLITransfer to sandboxTrigger PipelineUpCloudVisual testsVultrWait for applyWeb MonitoringWebDAVWindowsWP CLIXcodeZIP
IP whitelistingDeployment issuesRepository connection issuesSSH action issuesBuild actions issuesSubmodule issuesGitLab integration issuesDocker multi-arch build failsSlow symlink uploadGit LFS workaroundMonorepo support

API Docs

OverviewHello World
IntroductionPersonal Access Token
CreateGetListEditDelete
CreateAddGetEditDeleteList
CreateGetListEditDelete
AddGetListAssign admin rightsDelete
CreateGetEditDelete
CreateGetListEditDelete
AddUpdateDelete
Enable SSOGet SSOUpdate SSODisable SSO
CreateGetListEditDelete
GetList your workspaces
Add actionAmazon S3AWS App Runner DeployAWS App Runner MonitorAWS CDK CLIAWS CLIAWS CLI 2AWS CodePipelineAWS ECSAWS LambdaAWS Lambda DeployAzureAzure CLIAzure StorageBackblaze B2BlackfireBugsnagBuild a Cordova AppBuild a Fastlane App (iOS)Build a Flutter App (iOS)Build a React Native AppBuild Android AppBuild Docker ImageBuild Flutter AppBuild multi-arch imageClear CacheCloudflareCloudFrontCode sign and export an iOS appCodeDeployCompress imagesCopy filesCreate new sandboxCustom ActionCustom buildDatadog notificationDatadog Service CheckDeploy to App Store ConnectDigitalOceanDigitalOcean CDNDigitalOcean CLIDigitalOcean SpacesDiscord notificationDocker CLIDockerfile LinterDownload Backblaze B2Download from sandboxDownload FTPDownload FTPSDownload GCSDownload S3Download SFTPElastic BeanstalkElastic Beanstalk MonitorEmail notificationEslintFirebaseFTPFTPSGCloud CLIGenerate variablesGhost InspectorGhost Inspector CLIGit PushGitcrypt lockGitcrypt unlockGitHub CLIGitHub ReleaseGitLab CLIGKE Apply DeploymentGKE kubectlGKE Run HelmGKE Run JobGKE Run PodGKE Set ImageGoogle App EngineGoogle CDNGoogle ChatGoogle Cloud RunGoogle Cloud StorageGoogle Compute EngineGoogle FunctionsGoogle Functions DeployHerokuHeroku CLIHoneybadgerHTTP RequestJMeter CLIKubernetes Apply Deployment ConfigurationKubernetes kubectlKubernetes Run Helm CMDsKubernetes Run PodKubernetes Set ImageLighthouseLink CheckerLinuxLogglyMacOSMicrosoft TeamsNetlifyNew Relic CLIOperate sandboxPass argumentsPing monitoringPublish Android ApplicationPublish Bundle to Google PlayPush Docker ImagePushbulletPushoverRackspaceRaygunReplaceRollbar notificationRsyncRun Docker containerSentry notificationSet variablesSFTPShopifyShopify CLISign Android ApplicationSign BundleSlack notificationSleepSms notificationSnykSplit TestsSSH commandSSH to sandboxSSL verifyStackHawk CLITCP monitoringTelegram notificationTerraform CLITheme Kit CLITransfer to a sandboxTrigger pipelineUpCloudVisual testsVultrWait for applyWeb monitoringWebDAVWindowsWP CLIXcodeZIP
GetListEditDelete
CreateGetListEditDeleteCloneClear cacheExport
GetListRunUpdateCancel, Retry or ApproveGet details and logs
AddListDelete
AddGetListDelete
GetUpdate the authenticated user
AddGetListEditDelete
CreateGetListDelete
GetListCompare
CreateUpdateGetDelete
GetList
CreateDeleteGetList
TerraformFAQ

Overview

Table of Contents
PermissionsEndpointHTTP VerbsAuthenticationSchemaParametersClient ErrorsTimezoneRate LimitingPaginationCross Origin Resource Sharing

Here you’ll find basic information on the Buddy’s API. If you’d like to see how things work in action, go to Hello World. In case of questions or requests, reach out on the live chat or write to [email protected].

Permissions

By default, the API is enabled in every workspace. You can disable it in the workspace settings. Permissions for calling out the API methods are the same as those in the website service. For example, if the ability to delete projects is restricted to admins only, the same restriction will be applied to the API methods.

Endpoint

Depending on the account type, the API is available from three locations.

For US accounts starting with app.buddy.works:

https://api.buddy.works

For EU accounts starting with eu.buddy.works:

https://api.eu.buddy.works

For on-premises installations of Buddy:

https://YOUR-IP-ADDRESS/api

HTTP Verbs

For each action, appropriate HTTP verbs need to be used:

VerbDescription
GETused to fetch resources
POSTused to create resources
PATCHused to update data; only fields sent in the request are updated
PUTused to update data; updates all properties of the object; set to null if something is not to be posted
DELETEused to delete resources

Authentication

Authentication is performed with OAuth2 mechanisms.

If you already have access_token, requests are sent with an HTTP HEADER:

Authorization: Bearer <access_token>

Schema

All requests must be sent and are received in JSON format. All API requests must be executed over HTTPS. Empty fields are returned as NULL and are not omitted. All dates are returned in the ISO format:

yyyy-MM-dd'T'HH:mm:ssZ

Summary and Detailed Objects

When you fetch a list of resources, the response is returned as a summary, which means that not all object fields are returned. It works this way to prevent impact on performance by large amount of data returned. For example, when fetching a list of commits, the response comes in a shortened version:

GET /workspaces/:domain/projects/:project_name/repository/commits

Sample Response

HTTP

Status: 200 OK
X-Rate-Limit-Limit: 1
X-Rate-Limit-Remaining: 999

JSON

{
  "url": "https://api.buddy.works/workspaces/buddy/projects/company-website/repository/commits",
  "html_url": "https://app.buddy.works/buddy/company-website/repository/commits",
  "commits": [
    {
      "url": "https://api.buddy.works/workspaces/buddy/projects/company-website/repository/commits/506a3963507943d6908154f4bc9646e829128a08",
      "html_url": "https://app.buddy.works/buddy/company-website/repository/commit/506a3963507943d6908154f4bc9646e829128a08",
      "revision": "506a3963507943d6908154f4bc9646e829128a08",
      "author_date": "2016-01-19T12:36:33Z",
      "commit_date": "2016-01-19T12:36:33Z",
      "message": "init repo\n",
      "committer": {
        "url": "https://api.buddy.works/workspaces/buddy/member/1",
        "html_url": "https://app.buddy.works/buddy/profile/1",
        "id": 1,
        "name": "Mike Benson",
        "avatar_url": "https://app.buddy.works/image-server/user/0/0/0/0/0/0/1/d643744fbe5ebf2906a4d075a5b97110/w/32/32/AVATAR.png"
      },
      "author": {
        "url": "https://api.buddy.works/workspaces/buddy/member/1",
        "html_url": "https://app.buddy.works/buddy/profile/1",
        "id": 1,
        "name": "Mike Benson",
        "avatar_url": "https://app.buddy.works/image-server/user/0/0/0/0/0/0/1/d643744fbe5ebf2906a4d075a5b97110/w/32/32/AVATAR.png"
      }
    }
  ]
}

When asking for a single commit, however, the response is a full object:

GET /workspaces/:domain/projects/:project_name/repository/commits/:revision

Sample Response

HTTP

Status: 200 OK
X-Rate-Limit-Limit: 1
X-Rate-Limit-Remaining: 999

JSON

{
  "url": "https://api.buddy.works/workspaces/buddy/projects/company-website/repository/commits/506a3963507943d6908154f4bc9646e829128a08",
  "html_url": "https://app.buddy.works/buddy/company-website/repository/commit/506a3963507943d6908154f4bc9646e829128a08",
  "revision": "506a3963507943d6908154f4bc9646e829128a08",
  "author_date": "2016-01-19T12:36:33Z",
  "commit_date": "2016-01-19T12:36:33Z",
  "message": "init repo\n",
  "stats": {
    "additions": 388,
    "deletions": 0,
    "total": 388
  },
  "files": [
    {
      "file_name": ".gitignore",
      "status": "ADDED",
      "additions": 3,
      "deletions": 0,
      "total": 3,
      "patch": "@@ -0,0 +1,3 @@\n+.idea/\n+.DS_Store\n+css/\n"
    }
  ],
  "committer": {
    "url": "https://api.buddy.works/workspaces/buddy/member/1",
    "html_url": "https://app.buddy.works/buddy/profile/1",
    "id": 1,
    "name": "Mike Benson",
    "avatar_url": "https://app.buddy.works/image-server/user/0/0/0/0/0/0/1/d643744fbe5ebf2906a4d075a5b97110/w/32/32/AVATAR.png"
  },
  "author": {
    "url": "https://api.buddy.works/workspaces/buddy/member/1",
    "html_url": "https://app.buddy.works/buddy/profile/1",
    "id": 1,
    "name": "Mike Benson",
    "avatar_url": "https://app.buddy.works/image-server/user/0/0/0/0/0/0/1/d643744fbe5ebf2906a4d075a5b97110/w/32/32/AVATAR.png"
  },
  "content_url": "https://api.buddy.works/workspaces/buddy/projects/company-website/repository/contents?revision=506a3963507943d6908154f4bc9646e829128a08"
}

status in file object can be either ADDED, MODIFIED, REPLACED, or DELETED

The documentation provides example responses for each API method. The response illustrates all attributes that are returned by that method.

Parameters

Required parameters are sent as path parameters. For example, the name of the project is a required parameter when fetching a list of commits:

GET https://api.buddy.works/workspaces/:domain/projects/:project_name/repository/commits

Optional parameters are posted as a query string. For example, in order to narrow a commit list to a specific time range, you need to execute the following method:

GET https://api.buddy.works/workspaces/:domain/projects/:project_name/repository/commits?since=2014-11-6T00:00:00Z&until=2014-11-7T00:00:00Z&page=1&per_page=2

For POST, PATCH, PUT and DELETE, parameters should be sent as body in JSON with Content-Type set to application/json. For example, to add a project you need to execute the following request:

Request

POST https://api.buddy.works/workspaces/buddy/projects

JSON

{
  "name": "landing-page",
  "display_name": "Landing page"
}

Client Errors

All API requests are validated. If something goes wrong, you’ll receive a descriptive error so that it can be quickly fixed by the invoker. There are three possible types of client errors that can be returned:

1. If you’re trying to execute an API method in a workspace with disabled API

HTTP

 HTTP/1.1 400 Bad Request

JSON

{
    "errors": [
        {
            "message": "API is disabled in this workspace."
        }
     ]
}

2. If the URL is in bad format

HTTP

 HTTP/1.1 400 Bad Request

JSON

{
    "errors": [
        {
            "message": "Invalid url: /api/ws/account/permissions"
        }
    ]
}

3. If the parameters are sent as a wrong type

HTTP

HTTP/1.1 400 Bad Request

JSON

{
    "errors": [
        {
            "message": "Value of 'name' cannot be empty."
        }
    ]
}

Timezone

Some requests can be paremetrized with a timestamp. For example, you can restrict a list of commits to a specific time range with the query param since/until. All dates should be sent in UTC timezone.

Rate Limiting

Updated on March 1, 2020.

User is allowed to make 5000 requests per hour regardless of the resource type. If you want to see your current rate limit status, check the returned HTTP headers of any API request:

GET https://api.buddy.works/user

HTTP

Status: 200 OK
X-Rate-Limit-Limit: 5000
X-Rate-Limit-Remaining: 4999
X-Rate-Limit-Reset: 1446629442

All information about your current rate limit status is told with headers:

Header NameDescription
X-Rate-Limit-LimitThe current number of requests that the consumer can make in the current window (60 minutes).
X-Rate-Limit-RemainingThe number of requests remaining in the current rate limit window.
X-Rate-Limit-ResetThe time at which the current rate limit window resets in UTC epoch seconds.

If the limit is exceeded, you’ll receive the following response:

HTTP

HTTP/1.1 403 Forbidden

JSON

{
 "errors": [
  {
   "message": "Rate limit exceeded."
  }
 ]
}

Pagination

Some requests which return a list of objects are divided in pages of 20 items as default. To change the number of items returned, you need to use per_page in the query parameter. To fetch the proceeding pages, you need to use the pagequery parameter. If the parameter page is not found, only the first page of the results will be returned:

https://api.buddy.works/workspaces/:domain/projects/:project_name/repository/commits?since=2014-11-6T00:00:00Z&until=2014-11-7T00:00:00Z&page=1&per_page=2

Cross Origin Resource Sharing

The API supports Cross Origin Resource Sharing (CORS) for AJAX requests from any origin. Here’s a sample request sent from a browser hitting http://example.com:

curl -kH "Origin: http://example.com" --verbose -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: X-Requested-With" -X OPTIONS https://api.buddy.works/workspaces/example/projects

OPTIONS /workspaces/example/projects HTTP/1.1
Host: api.buddy.works
User-Agent: curl/7.47.0
Accept: */*
Origin: http://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Requested-With

HTTP/1.1 200 OK
Date: Thu, 20 Jul 2017 11:56:53 GMT
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: POST GET
X-Buddy-Media-Type: buddy.v1.0.0
Access-Control-Allow-Origin: *
Content-Length: 0
Server: Jetty(9.4.6.v20170531)

Last modified on September 11, 2023

Questions?

Not sure how to configure a pipeline for your process? Reach out on the live-chat or contact support

Get Started

Sign up for free and deploy your project in less than 10 minutes.

GitHubEmail

Knowledge is power!

Sign up to our newsletter and be up to speed on the latest DevOps trends

You can unsubscribe any time.

Security certifications & compliance. We make sure your data is safe and secure.

Automation

  • Pipelines: your doorway to CI/CD
  • Laravel in Docker
  • Node.js in Docker
  • Selenium in Node.js with WebDriver.io
  • Automate Kubernetes workflows
  • CI/CD Trend Report
Compare
  • Buddy vs CircleCI
  • Buddy vs Jenkins
  • Buddy vs GitLab CI
  • CircleCI vs Jenkins
  • CircleCI vs Gitlab CI
  • Gitlab CI vs Jenkins

Solutions

  • WordPress
  • Shopify
  • Node.js
  • React
  • Vue
  • PHP

Learn

  • Documentation
  • Guides
  • Tutorials
  • Blog
  • Webinars
  • API

Platform

  • Actions
  • Pricing & Features
  • About Us
  • Enterprise
  • Customer Stories
[email protected]

© Copyright 2024 Buddy

All systems are operational
SecurityTermsPrivacyResponsible Disclosure PolicyGDPR