Table of Contents

    API

    Mock Server

    Use this URL to access a mockup of the API server. Your traffic will be recorded and compared to the documentation. You'll find your traffic analysis in the inspector or directly here in the documentation, right next to each resource.

GoodData API Documentation

GoodData API is based on REST principles, all you need to use it is your GoodData account. You have to be authenticated and call the simple HTTPs request on the URL specified below. The following documentation covers core resources that are used to manipulate with the main entities. First of all, read basic instructions to start using the API.

Please use your GoodData account credentials for API calls.

Allowed HTTPs requests:

  • POST - To create or update resource
  • PUT - To create or update resource
  • GET - Get a resource or list of resources
  • DELETE - To delete resource

Description Of Usual Server Responses

  • 200 OK - the request was successful (some API calls may return 201 instead).
  • 201 Created - the request was successful and a resource was created.
  • 204 No Content - the request was successful but there is no representation to return (i.e. the response is empty).
  • 400 Bad Request - the request could not be understood or was missing required parameters.
  • 401 Unauthorized - authentication failed or user doesn't have permissions for requested operation.
  • 403 Forbidden - access denied.
  • 404 Not Found - resource was not found.
  • 405 Method Not Allowed - requested method is not supported for resource.
  • 429 Too Many Requests - exceeded GoodData API limits. Pause requests, wait up to one minute, and try again.
  • 503 Service Unavailable - service is temporary unavailable (e.g. scheduled Platform Maintenance). Try again later.

Login

To login into the GoodData API, use following calls:

  • 1. POST your credentials in JSON body to the gdc/account/login resource. An SST Token is returned back in SetCookie header.
  • 2. GET the gdc/account/token resource using the SST Token in your header to receive a TT Token.
  • 3. Use the TT Token in your API calls header: -cookie

Remember that TT Token has limited validity. Once you received 401 Unauthorized Response, you need to GET new TT Token in following resource with SST Token specified in call header.

Login Properties

  • login (string) : User's email
  • password (string) : User's password
  • remember (boolean) : Remember user login

POST

/gdc/account/login

This resource is the first. Use it to log into the API.

Please use your GoodData account credentials for API calls.

Response

200 (OK)
Set-Cookie: GDCAuthTT=; path=/gdc; expires=Mon, 30-Jul-2012 09:12:42 GMT; secure; HttpOnly, GDCAuthSST={super-secured-token}; path=/gdc/account; secure; HttpOnly
Content-Type: application/json
{"userLogin":{"profile":"/gdc/account/profile/USER-ID","state":"/gdc/account/login/USER-ID"}}

GET

/gdc/account/profile/{user-id}

Response

200 (OK)

GET

/gdc/account/token

You'll get the authentication token on this resource.

Response

200 (OK)
Set-Cookie: set-cookie: GDCAuthTT={temporary-token}; path=/gdc; secure; HttpOnly

DELETE

/gdc/account/login/{user-id}

For logout the user

Response

200 (OK)

Project

Project is one of the key entities inside GoodData. When working with GoodData, you basically create projects (datamarts). Metrics, Reports and Dashboards are then created inside Projects. Project may be in one of the following states. First two states are key for you and your integrations:

  • ENABLED - project is ready and available
  • DELETED - something is wrong

Once you create a Project with a POST request shown below, poll the returned url and check the Project state value until it is ENABLED or DELETED. Find out more information about how to create a project programatically on this discussion thread. Other states that project can be in:

  • PREPARING
  • LOADING
  • PREPARED
  • DISABLED
  • ARCHIVED

Project Properties

  • title (string) : Project Title
  • summary (string) : Project summary
  • roles (uri) : User's role in the Project
  • userPermissions (uri) : User permissions information
  • userRoles (uri) : User roles information
  • users (uri) : Project users information
  • created (date) : Date of project creation
  • updated (date) : Date of project update
  • author (uri) : Project creator account
  • exportUsers (boolean) : export users from project true/false
  • exportData (boolean) : export data from project true/false
  • token (string) : export Token for export/import project usage

POST

/gdc/projects

To create new project, use following call. Poll the resource that you received as response until it gives you the status: ENABLED or DELETED See the next API call for more details.

Response

201 (Created)
Content-Type: application/json
{
   "uri" : "/gdc/projects/TEST_PROJECT_ID"
}

GET

/gdc/projects/{project-id}

To show the Project information after creation or whenever you need it. While creating a new project, poll this resource until the state is ENABLED or DELETED.

Response

200 (OK)
Content-Type: application/json
{
   "project" : {
      "content" : {
         "guidedNavigation" : "1",
         "isPublic" : "0",
         "state" : "ENABLED"
      },
      "links" : {
         "roles" : "/gdc/projects/Project2/roles",
         "ldm_thumbnail" : "/gdc/projects/Project2/ldm?thumbnail=1",
         "connectors" : "/gdc/projects/Project2/connectors",
         "self" : "/gdc/projects/Project2",
         "invitations" : "/gdc/projects/Project2/invitations",
         "users" : "/gdc/projects/Project2/users",
         "ldm" : "/gdc/projects/Project2/ldm",
         "publicartifacts" : "/gdc/projects/Project2/publicartifacts",
         "metadata" : "/gdc/md/Project2",
         "templates" : "/gdc/md/Project2/templates"
      },
      "meta" : {
         "created" : "2012-05-01 23:56:01",
         "summary" : "Quotes",
         "updated" : "2012-05-01 23:56:01",
         "author" : "/gdc/account/profile/17",
         "title" : "Quotes",
         "contributor" : "/gdc/account/profile/17"
      }
   }
}

DELETE

/gdc/projects/{project-id}

This API call will DELETE your defined project. Only Project ADMIN can do this action.

Response

200 (OK)
Content-Type: application/json
{}

GET

/gdc/account/profile/{profile-id}/projects

To list all existing projects

Response

200 (OK)
Content-Type: application/json
{
   "projects" : [
      {
         "project" : {
            "content" : {
               "guidedNavigation" : "1",
               "isPublic" : "0",
               "state" : "ENABLED"
            },
            "links" : {
               "roles" : "/gdc/projects/PROJECT_ID/roles",
               "ldm_thumbnail" : "/gdc/projects/PROJECT_ID/ldm?thumbnail=1",
               "userPermissions" : "/gdc/projects/PROJECT_ID_/users/PROFILE_ID/permissions",
               "userRoles" : "/gdc/projects/PROJECT_ID/users/PROFILE_ID/roles",
               "connectors" : "/gdc/projects/PROJECT_ID/connectors",
               "self" : "/gdc/projects/PROJECT_ID",
               "invitations" : "/gdc/projects/PROJECT_ID/invitations",
               "users" : "/gdc/projects/PROJECT_ID/users",
               "ldm" : "/gdc/projects/PROJECT_ID/ldm",
               "metadata" : "/gdc/md/PROJECT_ID",
               "publicartifacts" : "/gdc/projects/PROJECT_ID/publicartifacts",
               "templates" : "/gdc/md/PROJECT_ID/templates"
            },
            "meta" : {
               "created" : "YYYY-MM-DD HH:MM:SS",
               "summary" : "Project Summary",
               "updated" : "YYYY-MM-DD HH:MM:SS",
               "author" : "/gdc/account/profile/PROFILE_ID",
               "title" : "Your Project Name",
               "contributor" : "/gdc/account/profile/PROFILE_ID"
            }
         }
      } ]
}

POST

/gdc/md/{project-id}/maintenance/export

To Export selected Project - exportUsers and exportData field are not mandatory. You receive Export token that is valid for 48 hours.

Response

200 (OK)
Content-Type: application/json
{
   "exportArtifact" : {
      "status" : {
         "uri" : "/gdc/md/PROJECT_ID/etltask/TASK_ID"
      },
      "token" : "EXPORT_TOKEN"
   }
}

POST

/gdc/md/{project-id}/maintenance/import

Use this method to import exported Project. Input is the Token exported from previous Export resource. You have to finish export/import during 48 hours (then - the token is no more valid)

Response

200 (OK)
Content-Type: application/json
{
"uri" : "/gdc/md/PROJECT_ID/etltask/TASK_ID"
}

PUT

/gdc/projects/{project-id}/styleSettings

To create your own custom colour palette in given Project

Response

204 (No Content)

GET

/gdc/projects/{project-id}/styleSettings

To GET your current color palette

Response

200 (OK)
Content-Type: application/json
{"styleSettings" :
   {"chartPalette": [ 
      { "guid": "guid1", "fill": { "r":255, "g":255, "b":0 } }, 
      { "guid": "guid2", "fill": { "r":255, "g":255, "b":40 } }, 
      { "guid": "guid3", "fill": { "r":255, "g":255, "b":80 } }, 
      { "guid": "guid4", "fill": { "r":255, "g":255, "b":120 } }, 
      { "guid": "guid5", "fill": { "r":255, "g":255, "b":180 } }, 
      { "guid": "guid6", "fill": { "r":255, "g":255, "b":200 } } 
      ]
   }
}

DELETE

/gdc/projects/{project-id}/styleSettings

To Delete/Reset your own custom colour palette in given Project

Response

204 (No Content)

GET

/gdc/projects/{project-id}/roles

To GET User roles for given project. Use following API call. There are 6 default roles (id 1-5), but these IDs are not fixed for specific user roles. You have to GET role details (following API call below) to set User roles correctly.

Response

200 (OK)
Content-Type: application/json
{
    "projectRoles": {
        "roles": [
            "/gdc/projects/{project-id}/roles/{role-id}",
            "/gdc/projects/{project-id}/roles/{role-id}",
            "/gdc/projects/{project-id}/roles/{role-id}",
            "/gdc/projects/{project-id}/roles/{role-id}",
            "/gdc/projects/{project-id}/roles/{role-id}"
        ],
        "links": {
            "project": "/gdc/projects/{project-id}/"
        }
    }
}

GET

/gdc/projects/{project-id}/roles/{role-id}

To GET details about specific project role, use this API call.

Response

200 (OK)
{
    "projectRole": {
        "permissions": {
            "canAccessIntegration": "0",
            "canCreateProjectDashboard": "0",
            "canManageComment": "0",
            "canCreateDimensionMapping": "0",
            "canInitData": "0",
            "canManageIntegration": "0",
            "canManageFolder": "0",
            "canInviteUserToProject": "0",
            "canCreateDomain": "0",
            "canCreateTableDataLoad": "0",
            "canSeeOtherUserDetails": "0",
            "canCreateETLInterface": "0",
            "canCreateRole": "0",
            "canCreateReportResult": "1",
            "canCreateHelp": "0",
            "canManageDomain": "0",
            "canManageAttributeLabel": "0",
            "canCreateColumn": "0",
            "canManageReport": "0",
            "canManageDataSet": "0",
            "canSetUserVariables": "0",
            "canCreateAttributeGroup": "0",
            "canValidateProject": "0",
            "canMaintainProject": "0",
            "canCreateETLFile": "0",
            "canCreateScheduledMail": "0",
            "canManageETLSession": "0",
            "canSuspendUserFromProject": "0",
            "canMaintainUserFilterRelation": "0",
            "canManageAttribute": "0",
            "canManageReportDefinition": "0",
            "canCreateReportResult2": "1",
            "canMaintainUserFilter": "0",
            "canCreateReport": "0",
            "canManageETLFile": "0",
            "canCreateComment": "0",
            "canCreateDataSet": "0",
            "canCreateTable": "0",
            "canManageTableDataLoad": "0",
            "canManageDimensionMapping": "0",
            "canCreateMetric": "0",
            "canRefreshData": "0",
            "canManageProjectDashboard": "0",
            "canManageProject": "0",
            "canManagePrompt": "0",
            "canManageETLInterface": "0",
            "canManageReportResult2": "0",
            "canAccessWorkbench": "0",
            "canCreateAttributeLabel": "0",
            "canManageColumn": "0",
            "canCreatePrompt": "0",
            "canManagePublicAccessCode": "0",
            "canListUsersInProject": "0",
            "canManageAttributeGroup": "0",
            "canManageMetric": "0",
            "canManageHelp": "0",
            "canManageTable": "0",
            "canSetProjectVariables": "0",
            "canCreateETLSession": "0",
            "canCreateFolder": "0",
            "canManageFact": "0",
            "canListInvitationsInProject": "0",
            "canManageScheduledMail": "0",
            "canManageReportResult": "1",
            "canManageAnnotation": "0",
            "canSeePublicAccessCode": "0",
            "canCreateReportDefinition": "1",
            "canCreateFact": "0",
            "canCreateAttribute": "0",
            "canAssignUserWithRole": "0",
            "canCreateAnnotation": "0"
        },
        "links": {
            "roleUsers": "/gdc/projects/{project-id}/roles/4/users"
        },
        "meta": {
            "created": "2012-07-25 11:28:52",
            "identifier": "dashboardOnlyRole",
            "summary": "dashboard only",
            "author": "/gdc/account/profile/{user-profile}",
            "updated": "2012-07-25 11:28:52",
            "title": "Embedded Dashboard Only",
            "contributor": "/gdc/account/profile/{user-profile}"
        }
    }
}

User

To manage users via the User Provisioning API Resources, you need to have your own domain. If you have it, you can simply use the requests below.

User Properties

  • login (string) : User login
  • password (string) : User password
  • verifyPassword (string) : Password for verification
  • email : User's email for invitations, used as contact email
  • firstname (string) : User's firstname
  • lastname (string) : User's lastname
  • userRoles (uri) : Uri to the specific user roles
  • projectUsersUpdateResult : Give an array of successful/failed created users
  • companyName (string) : Name of user's company
  • country (string) : User's country
  • created (date) : Date of user creation
  • updated (date) : Date of user properties update
  • phoneNumber : User's phonenumber
  • position (string) : User's position in a company
  • authenticationModes (array of strings) : an optional field specifying authentication modes (SSO, PASSWORD) allowed for this user. The value of this field overrides the global settings for the domain.

POST

/gdc/account/domains/{organization-name}/users

To create new user in your domain - use this resource. The API will give you new user's uri. You have to be ORGANIZATION admin for provision the user to the Project.

Response

200 (OK)
{
"uri" : "/gdc/account/profile/{profile-id}"
}

GET

/gdc/account/domains/{organization-name}/users

Lists all users in a domain

Response

200 (OK)
{
    "accountSettings": {
        "paging": {
            "offset": 0,
            "count": 14
        },
        "items": [
            {
                "accountSetting": {
                    "companyName": "Company",
                    "country": "cz",
                    "created": "2011-08-10 08:37:46",
                    "firstName": "John",
                    "lastName": "Doe",
                    "login": "user.name@company.com",
                    "ssoProvider":"SSO-PROVIDER",
                    "phoneNumber": "+420724722926",
                    "position": "",
                    "settings": "{\"_VERSION\":\"1.1\",\"currentProjectUri\":\"/gdc/projects/{project-id}\",\"/gdc/projects/5znhmmxxrzjan0r2p1v7ofycdsrx0264\":{\"dashboard\":[\"/gdc/md/5znhmmxxrzjan0r2p1v7ofycdsrx0264/obj/15091\",\"aF3FJYXegmp7\"]},\"releaseNotice\":[\"stable_67\"],\"/gdc/projects/ca6a1r1lbfwpt2v05k36nbc0cjpu7lh9\":{\"dashboard\":[\"/gdc/md/ca6a1r1lbfwpt2v05k36nbc0cjpu7lh9/obj/200001988\",\"azBgmCJJe0mc\"]},\"/gdc/projects/uikbr0t694tnh3uje22yedukbyzyt30o\":{\"dashboard\":[\"/gdc/md/uikbr0t694tnh3uje22yedukbyzyt30o/obj/923\",\"aezS8TwAcGHp\"]},\"/gdc/projects/rgxvsmz1p995jek9ul9tlmpf6t58smrc\":{\"dashboard\":[\"/gdc/md/rgxvsmz1p995jek9ul9tlmpf6t58smrc/obj/3077\",\"akr9OnQ1eOm4\"]},\"hint-projectPage-invite-people\":false,\"/gdc/projects/j41cf2ph664i24r06zvj4f8rcpwoc7z5\":{\"dashboard\":[\"/gdc/md/j41cf2ph664i24r06zvj4f8rcpwoc7z5/obj/302\",\"acuSDRVTfsy9\"]},\"/gdc/projects/aroa0dpcaw7qde90zk28qe1g8a9yiduc\":{\"dashboard\":[\"/gdc/md/aroa0dpcaw7qde90zk28qe1g8a9yiduc/obj/1934\",\"aThZ8kBxhhOD\"]},\"/gdc/projects/als9uzqw5b3mmedep20dz079gu4l2ts4\":{\"dashboard\":[\"/gdc/md/als9uzqw5b3mmedep20dz079gu4l2ts4/obj/255\",\"acuSDRVTfsy9\"]},\"/gdc/projects/e40dze1gsyuzbiw6uo7pezb172za0g6t\":{\"dashboard\":[\"/gdc/md/e40dze1gsyuzbiw6uo7pezb172za0g6t/obj/878\",\"amDMbVxHiEpT\"]},\"/gdc/projects/qdi4csdu3cncw7cl6ytw0c08ezhjiacl\":{\"dashboard\":[\"/gdc/md/qdi4csdu3cncw7cl6ytw0c08ezhjiacl/obj/1934\",\"aae2SZzwayQc\"]},\"/gdc/projects/88w3p5nd8tjvvugg71o7alrn95brxd49\":{\"dashboard\":[\"/gdc/md/88w3p5nd8tjvvugg71o7alrn95brxd49/obj/1934\",\"aae2SZzwayQc\"]},\"/gdc/projects/1fm43ndfbq0adk6q44sv6vzjfe2mpzbf\":{\"dashboard\":[\"/gdc/md/1fm43ndfbq0adk6q44sv6vzjfe2mpzbf/obj/302\",\"acuSDRVTfsy9\"]},\"/gdc/projects/z7hy8dgakfovolhmkr0in5gab55eh8sf\":{\"dashboard\":[\"/gdc/md/z7hy8dgakfovolhmkr0in5gab55eh8sf/obj/1134\",\"axbb0wX9hWXt\"]},\"/gdc/projects/0xdgi5rf00ojg3i8buihnce9abcs0jlo\":{\"dashboard\":[\"/gdc/md/0xdgi5rf00ojg3i8buihnce9abcs0jlo/obj/1788\",\"bykyxrVPd4bK\"]},\"/gdc/projects/j411aqhpfwyfhbfcmpgp7wdv2kkadk1h\":{\"dashboard\":[\"/gdc/md/j411aqhpfwyfhbfcmpgp7wdv2kkadk1h/obj/1134\",\"axbb0wX9hWXt\"]},\"/gdc/projects/3j538qu3uaco59yqvy4f67x6r1yp2xcb\":{\"dashboard\":[\"/gdc/md/3j538qu3uaco59yqvy4f67x6r1yp2xcb/obj/928\",\"aejgJwQohyCf\"]},\"/gdc/projects/x0ihh49quilaf0cjm651nnj2hxbmfm3c\":{\"dashboard\":[\"/gdc/md/x0ihh49quilaf0cjm651nnj2hxbmfm3c/obj/1221\",\"aeMPJK0fceaH\"]},\"/gdc/projects/nb8vzlyj8sosxx0myv0tww82j0nosbql\":{\"dashboard\":[\"/gdc/md/nb8vzlyj8sosxx0myv0tww82j0nosbql/obj/975\",\"apcbnqrNem2V\"]},\"/gdc/projects/24ubdyx5m28ojz2fnf34y74vjaxw82r2\":{\"dashboard\":[\"/gdc/md/24ubdyx5m28ojz2fnf34y74vjaxw82r2/obj/4673\",\"akoz8EgNhzEx\"]},\"/gdc/projects/8thc020r46ru5mej90dewtxsdmfdmn9w\":{\"dashboard\":[\"/gdc/md/8thc020r46ru5mej90dewtxsdmfdmn9w/obj/21607\",\"aedRQW1vbS2i\"]},\"/gdc/projects/vs20w6yqnt64jaaw93wlg6osod4w0pew\":{\"dashboard\":[\"/gdc/md/vs20w6yqnt64jaaw93wlg6osod4w0pew/obj/1179\",\"aci3ZI2qg9WA\"]},\"/gdc/projects/fdybuqt6q711dk7fj0hyb17xug4occ7h\":{\"dashboard\":[\"/gdc/md/fdybuqt6q711dk7fj0hyb17xug4occ7h/obj/302\",\"acuSDRVTfsy9\"]},\"/gdc/projects/5c3eynt8oemo1tbg7r18wm1lihsbhi3w\":{\"dashboard\":[\"/gdc/md/5c3eynt8oemo1tbg7r18wm1lihsbhi3w/obj/22383\",\"aafYWrtQicJz\"]},\"/gdc/projects/o1bkm459hl3oqpfvowhc5atm8epum3n8\":{\"dashboard\":[\"/gdc/md/o1bkm459hl3oqpfvowhc5atm8epum3n8/obj/975\",\"apcbnqrNem2V\"]},\"/gdc/projects/u2sgybzl95ezxj06nxvazqryymvhd6xx\":{\"dashboard\":[\"/gdc/md/u2sgybzl95ezxj06nxvazqryymvhd6xx/obj/829\",\"aarQ2wqyh3OO\"]},\"/gdc/projects/ns1tzvr069ufw3gsvgveldbfbh6uyx8u\":{\"dashboard\":[\"/gdc/md/ns1tzvr069ufw3gsvgveldbfbh6uyx8u/obj/975\",\"apcbnqrNem2V\"]},\"/gdc/projects/fe6syz94xsf0n7indc4q4t45bt0ad68f\":{\"dashboard\":[\"/gdc/md/fe6syz94xsf0n7indc4q4t45bt0ad68f/obj/4673\",\"adLaxLMQaQ3s\"]},\"/gdc/projects/fl1tx117xb3qw2ngiuv7prud9a0qsowl\":{\"dashboard\":[\"/gdc/md/fl1tx117xb3qw2ngiuv7prud9a0qsowl/obj/245\",\"aemCHDx1ioL2\"]},\"/gdc/projects/fw1p4xvz8e99g5100wfxymzodatqbmg2\":{\"dashboard\":[\"/gdc/md/fw1p4xvz8e99g5100wfxymzodatqbmg2/obj/4673\",\"aaOGHRxOh0dl\"]},\"/gdc/projects/ic2l94mn960iyy5ycz7dnfz6mhil8php\":{\"dashboard\":[\"/gdc/md/ic2l94mn960iyy5ycz7dnfz6mhil8php/obj/4673\",\"akoz8EgNhzEx\"]},\"/gdc/projects/jusjqe0f5lz3wkpcwxoyyckzclsk2tpy\":{\"dashboard\":[\"/gdc/md/jusjqe0f5lz3wkpcwxoyyckzclsk2tpy/obj/12982\",\"aaGUiXk8hqek\"]}}",
                    "timezone": null,
                    "updated": "2012-02-20 16:20:28",
                    "links": {
                        "projects": "/gdc/account/profile/19765/projects",
                        "self": "/gdc/account/profile/19765"
                    }
                }
            },
            {
                "accountSetting": {
                    "companyName": "",
                    "country": "",
                    "created": "2011-11-03 15:16:52",
                    "firstName": "J",
                    "lastName": "T",
                    "login": "deleted-25022@gooddata.com",
                    "phoneNumber": "",
                    "position": "",
                    "settings": "",
                    "timezone": null,
                    "ssoProvider":"SSO-PROVIDER",
                    "updated": "2011-12-15 14:40:37",
                    "links": {
                        "projects": "/gdc/account/profile/25022/projects",
                        "self": "/gdc/account/profile/25022"
                    }
                }
            }
        ]
    }
}

GET

/gdc/projects/{project-id}/users?offset=0&limit=5

To GET all users in Project

Paging: This resource optionally allows paging. Use offset and limit parameters on the end of the URI. example: users?offset=1&limit=3

Response

200 (OK)
{
   "users" : [
      {
         "user" : {
            "content" : {
               "email" : "user@domain.com",
               "firstname" : "John",
               "userRoles" : [
                  "/gdc/projects/{project_id}/roles/2"
               ],
               "phonenumber" : "+777777777",
               "status" : "ENABLED",
               "lastname" : "Dow",
               "login" : "user@domain.com"
            },
            "links" : {
               "roles" : "/gdc/projects/{project_id}/users/2f35048619b7b0ff03f408d2c4b6390d/roles",
               "permissions" : "/gdc/projects/{project_id}/users/2f35048619b7b0ff03f408d2c4b6390d/permissions",
               "groups" : "/gdc/projects/{project_id}/users/2f35048619b7b0ff03f408d2c4b6390d/groups",
               "self" : "/gdc/account/profile/{project_id}",
               "invitations" : "/gdc/account/profile/{project_id}/invitations",
               "projects" : "/gdc/account/profile/{project_id}/projects",
               "projectRelUri" : "/gdc/projects/{project_id}/users/2f35048619b7b0ff03f408d2c4b6390d"
            },
            "meta" : {
               "created" : "2011-08-10 08:37:46",
               "updated" : "2013-05-27 11:08:09",
               "author" : "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
               "title" : "John Dow",
               "contributor" : "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            }
         }
      }
   ]
}

GET

/gdc/account/{domain-name}/users?login={some-encoded-login}

To GET all users in Project

Login parameter: You can use login parameter that will return exactly one user object specify by email that is encoded. Example
login: user@gooddata.com will be encoded as ?login=user%40gooddata.com

Response

200 (OK)
 {
      "accountSettings": {
      "paging": {
      "offset": 0,
      "count": 1
},
"items": [
    {
        "accountSetting": {
            "companyName": null,
            "country": null,
            "created": "2014-02-24 18:51:53",
            "firstName": "Zendesk",
            "lastName": "Uploader",
            "login": "support+zendesk-upload@gooddata.com",
            "phoneNumber": null,
            "position": null,
            "timezone": null,
            "updated": "2014-02-24 18:51:53",
            "links": {
                "projects": "/gdc/account/profile/a5e0aa8f6758c4b7cb48ec1d75262903/projects",
                "self": "/gdc/account/profile/a5e0aa8f6758c4b7cb48ec1d75262903"
            },
            "email": "support+zendesk-upload@gooddata.com"
            }
        }
        ]
    }
 }

POST

/gdc/projects/{project-id}/users

To add created User to the Project. There are several default User roles in every project:

  • readOnlyUserRole
  • dashboardOnlyRole
  • adminRole
  • editorRole
  • unverifiedAdminRole

These roles don't have fixed ID. You need to GET the information from diferent API call. See the Project API section.

Response

200 (OK)
{"projectUsersUpdateResult":{
    "successful":["/gdc/account/profile/{profile-id}"],
    "failed":[]}
}

GET

/gdc/account/profile/current

You can get information about your currently logged in user.

Response

200 (OK)

POST

/gdc/projects/{project-id}/invitations

Use this resource for invite user to the Project. The invitation email will be sent.

Response

200 (OK)
{
    "createdInvitations": {
        "uri": [
            "/gdc/projects/{project-id}/invitations/{invitation-id}"
        ]
    }
}

PUT

/gdc/account/profile/{user-id}

You are able to update the User information

Response

200 (OK)

DELETE

/gdc/account/profile/{user-id}

Use this request to delete User

Response

200 (OK)

Project Model

The data model is the core concept of GoodData. It can be managed and validated using following API resources. Model is created/managed by using the MAQL language and script.

Model properties

  • maql : MAQL script for creating/updating logical data model
  • validateProject : IO - Input/Output, LDM - Logical Data Model, PDM - Physical Data Model

Limitations

Most severe limitation of current Project Model API is it's inability to work with projects in which single dataset contains a hierarchy of attributes (other than relation between dataset's anchor and it's other attributes). For the API to work correctly, all datasets in project's logical data model must be loading a single star schema. This is always true for models maintained via cl-tool, CloudConnect or Project Model API, however, this requirement may be easily broken when modyfying project's model directly through MAQL DDL. We'll try to improve the expressiveness of the API (and with this, expanding the set of supported projects) in the future.

Project Model Representation

Common properties of model objects:

Types of object for which the given property is applicable are included in parentheses.

  • identifier required (dataset, attribute, fact, label) - identifier unique among all objects; it must start with a letter, followed by lower and upper-case letters, numbers, dots . and underscores _
  • title required (dataset, date dimension, attribute, fact, label) - short human-readable description of the object; main representation of the object in UI
  • description (dataset, attribute, fact, label) - longer human-readable description of the object
  • folder (attribute, fact) - title of folder in which the object should be categorized
  • dataType (fact, label) - specifies data type of values loaded for the given object; defaults to DECIMAL(12,2) for facts and VARCHAR(128) for labels

Special properties of model objects:

  • Dataset
    • anchor - attribute with finest granularity (same granularity as facts, if there are any) that provides identity to dataset records and can be used for COUNTing number of records in it's fact table; dataset A is required to have an anchor with at least one label if there's a dataset B that has a reference to A (values of anchor's label are used to link data from multiple datasets together)
    • attributes - all other attributes in the dataset (except anchor); these have coarser granularity than the anchor and can be used in reports build from facts in the same dataset; f.ex. if anchor is Employee ID then Sex could be one of the attributes
    • facts - facts about the concept identified by anchor; f.ex. if anchor is Employee ID, Age could be one of the facts
    • references - array of identifiers of other datasets and names of date dimensions; if dataset Employee has a reference to dataset Department, then you can use attributes of Department in reports based on facts of Employee
  • DateDimension
    • name required - identifies the date dimension; rules for identifiers apply (must be unique, limited characters)
  • Attribute
    • defaultLabel - identifier of the label that contains default visual representation of attribute's value
    • sortOrder - defines how attribute values should be ordered; you must specify label to sort by and direction - sample value: { "attributeSortOrder" : { "label" : "label.person.id.name", "direction" : "ASC" } }
  • Label
    • type - type of label; defaults to GDC.text; supported values:
      • GDC.text - normal label, presented as plain text in the UI
      • GDC.link - label contains URL and is presented as clickable hyperlink in the UI

Obtaining current LDM of a project

Assembly of project model is currently a lehgthy process and so the API has to be asynchronous. We'll try to optimize this in the future.

When inspecting project metadata, we may find out that project does not conform to rules described in Limitations. The result in that case will still be a 200 OK, but you'll see some validation errors returned together with the resulting model. You should not rely on such model. It's only provided for convenience so that it can be inspected. You won't be able to modify such project through Project Model API.

Properties of validation error:

  • code - unique code of the type of validation problem (can be relied on as a localization key for message)
  • context - array of identifiers of objects breaking validation rules
  • message - human-readable message describing the problem (with %s placeholders for message params)
  • parameters - parameters for the message
  • reparable - true if this problem can be repaired through this API, false if you won't be available to perform diffs against such project & will have to resolve the problem manually (f.ex. through hand-crafted MAQL DDL)

List of validation errors will be empty for projects with supported models. If it isn't, you'll have to manually resolve (through MAQL DDL) all issues before you'll be able to use this API to update such project's model.

GET

/gdc/projects/{project-id}/model/view

Starts project model assembly. Returns link to a polling resource that will eventually return assembled model.

Response

202 (Accepted)
Location: /gdc/projects/{project-id}/model/view/{view-id}
Content-Type: application/json
{
    "asyncTask": {
        "link": {
            "poll": "/gdc/projects/{project-id}/model/view/{view-id}"
        }
    }
}

GET

/gdc/projects/{project-id}/model/view/{view-id}

Poll to obtain assembled project model.

Response

202 (Accepted)
Content-Type: application/json
{
    "asyncTask": {
        "link": {
            "poll": "/gdc/projects/{project-id}/model/view/{view-id}"
        }
    }
}

Response

200 (OK)
Content-Type: application/json
{
    "projectModelView" : {
        "model": {
            "projectModel": {
                "datasets": [
                    {
                        "dataset": {
                            "identifier": "dataset.employee",
                            "title": "Employee",
                            "anchor": {
                                "attribute": {
                                    "identifier": "attr.employee.employee",
                                    "title": "Employee",
                                    "folder": "Employee",
                                    "labels": [
                                        {
                                            "label": {
                                                "identifier": "label.employee.employee",
                                                "title": "Employee",
                                                "dataType": "INT",
                                                "type": "GDC.text"
                                            }
                                        },
                                        {
                                            "label": {
                                                "identifier": "label.employee.employee.name",
                                                "title": "Employee Name",
                                                "dataType": "VARCHAR(128)",
                                                "type": "GDC.text"
                                            }
                                        },
                                        "defaultLabel": "label.employee.employee.name",
                                        "sortOrder": { 
                                            "attributeSortOrder" : { 
                                                "label" : "label.employee.employee.name",
                                                "direction" : "ASC"
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    {
                        "dataset": {
                            "identifier": "dataset.salary",
                            "title": "Salary",
                            "anchor": {
                                "attribute": {
                                    "identifier": "attr.salary.factsof",
                                    "title": "Records of Salary",
                                    "folder": "Salary"
                                }
                            },
                            "facts": [
                                {
                                    "fact": {
                                        "identifier": "fact.salary.payment",
                                        "title": "Payment",
                                        "folder": "Salary",
                                        "dataType": "DECIMAL(12,2)"
                                    }
                                }
                            ],
                            "references": ["dataset.employee", "payment"]
                        }
                    }
                ],
                "dateDimensions": [
                    {
                        "dateDimension": {
                            "name": "payment",
                            "title": "Payment"
                        }
                    }
                ]
            }
        },
        "validationErrors": []
    }
}

Generate MAQL DDL to update project

Resources to generate MAQL DDL to update project's model to the desired target state. It does not modify the model itself, but gives you MAQL DDL scripts that can be executed via the /gdc/md/{project-id}/ldm/manage2 resource.

The result

Update operations

Diff between the two model states - operations that should be applied to current project model to make it equal to the submitted targetModel. The list is not meant to be an authoritative representation of the diff. It's granularity is based on current MAQL DDL grammar and it can be changed in the future without notice. It's therefore more useful for presentation to user for inspection than automatic inspection in code.

List of update operations will be empty if the project's model is already equal to the provided targetState.

Each update operation has the following properties:

  • type - unique identifier of operation type (can be relied on as localization key for the description); in time, new operation types may be created and old ones discontinued; we don't recommend relying on it's value for anything besides grouping simmilar changes together
  • dataset - optional identifier of the dataset to which this operation is related; inteded for presentation purposes
  • destructive - true if the operation may result in dropping existing PDM objects, false otherwise
  • description - human-readable description of the change (with %s placeholders for parameters)
  • parameters - parameters for the description

Update scripts

If the list of update operations is non-empty, updateScripts property of the response will contain one or more variants of MAQL DDL that can be executed to actually evolve project's model. Each variant is generated with distinct settings and some combination of optionas may not be available (see below).

Each update script has the following properties:

  • maqlDdlChunks - a list of MAQL DDL scripts that can executed sequentially via the /gdc/md/{project-id}/ldm/manage2 resource to actually perform model evolution
  • preserveData - true if script execution won't truncate data currently loaded in affected datasets, false otherwise; some changes of the model will result in this option not being available (preserveData: false in all update script variants)
  • cascadeDrops - true if generated MAQL use DROPs with the CASCADE option; such drops transitively delete all dashboard objects connected to the dropped LDM object, so you should only execute it if you're certain that you don't need metrics / reports / dashboards that use the dropped object; if the generated MAQL doesn't drop anything, this option will be false in all update script variants

Example

In the example below, we simulate generation of evolution MAQL script for the model included in the example response of the /gdc/projects/{project-id}/model/view resource. The target model contains one extra fact (fact.employee.age).

POST

/gdc/projects/{project-id}/model/diff

Post desired target LDM state to start the MAQL generation process. Returns link to a polling resource that will eventually return the diff.

Response

202 (Accepted)
Location: /gdc/projects/{project-id}/model/diff/{diff-id}
Content-Type: application/json
{
    "asyncTask": {
        "link": {
            "poll": "/gdc/projects/{project-id}/model/diff/{diff-id}"
        }
    }
}

GET

/gdc/projects/{project-id}/model/diff/{diff-id}

Poll to get resulting diff & MAQL.

Response

202 (Accepted)
Content-Type: application/json
{
    "asyncTask": {
        "link": {
            "poll": "/gdc/projects/{project-id}/model/diff/{diff-id}"
        }
    }
}

Response

200 (OK)
Content-Type: application/json
{
    "projectModelDiff" : {
        "updateOperations": [
            {
                "updateOperation": {
                    "type": "create.fact",
                    "dataset": "dataset.employee",
                    "destructive": false,
                    "description": "Create Fact '%s'",
                    "paramaters": ["Employee Age"]
                }
            }
        ],
        "updateScripts": [
            {
                "updateScript": {
                    "maqlDdlChunks": [ "CREATE FOLDER {ffld.employee} VISUAL(TITLE \"Employee\") TYPE FACT;\nCREATE FACT {fact.employee.age} VISUAL(TITLE \"Employee Age\", FOLDER {ffld.employee}) AS {f_employee.f_age};\nALTER DATASET {dataset.employee} ADD {fact.employee.age};\nSYNCHRONIZE {dataset.employee} PRESERVE DATA;" ],
                    "preserveData": true,
                    "cascadeDrops": false
                }
            },
            {
                "updateScript": {
                    "maqlDdlChunks": [ "CREATE FOLDER {ffld.employee} VISUAL(TITLE \"Employee\") TYPE FACT;\nCREATE FACT {fact.employee.age} VISUAL(TITLE \"Employee Age\", FOLDER {ffld.employee}) AS {f_employee.f_age};\nALTER DATASET {dataset.employee} ADD {fact.employee.age};\nSYNCHRONIZE {dataset.employee};" ],
                    "preserveData": false,
                    "cascadeDrops": false
                }
            }
        ]
    }
}

Execute MAQL DDL and Project Model Validation

Resources to execute MAQL DDL to create/update project's model to the desired target state.

POST

/gdc/md/{project-id}/ldm/manage

To manage Logical Data Model

Response

200 (OK)

POST

/gdc/md/{project-id}/validate/

Use this method to validate Project

Response

201 (Created)
{"uri" : "/gdc/md/PROJECT_ID/validate/TASK_ID"}

GET

/gdc/md/{project-id}/ldm/singleloadinterface/{dataset-name}/manifest

Here you can GET the SLI manifest. This manifest is needed to upload your data using the API directly. The SLI manifest provides column mapping between CSV file and data model.

Response

200 (OK)
{
    "dataSetSLIManifest": {
        "parts": [
            {
                "columnName": "f_quotes.dt_quote_date_id",
                "populates": [
                    "quote.date.mdyy"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "d_quotes_sector.nm_sector",
                "populates": [
                    "label.quotes.sector"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "d_quotes_market.nm_market",
                "populates": [
                    "label.quotes.market"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "f_quotes.f_low_price",
                "populates": [
                    "fact.quotes.low_price"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "f_quotes.nm_id",
                "populates": [
                    "label.quotes.id"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "f_quotes.f_volume",
                "populates": [
                    "fact.quotes.volume"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "f_quotes.dt_quote_date",
                "populates": [
                    "dt.quotes.quote_date"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "f_quotes.f_open_price",
                "populates": [
                    "fact.quotes.open_price"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "d_quotes_symbol.nm_symbol",
                "populates": [
                    "label.quotes.symbol"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "d_quotes_symbol.nm_company",
                "populates": [
                    "label.quotes.symbol.company"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "f_quotes.f_high_price",
                "populates": [
                    "fact.quotes.high_price"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "d_quotes_industry.nm_industry",
                "populates": [
                    "label.quotes.industry"
                ],
                "mode": "FULL",
                "referenceKey": 1
            },
            {
                "columnName": "f_quotes.f_close_price",
                "populates": [
                    "fact.quotes.close_price"
                ],
                "mode": "FULL"
            },
            {
                "columnName": "f_quotes.f_adjusted_close_price",
                "populates": [
                    "fact.quotes.adjusted_close_price"
                ],
                "mode": "FULL"
            }
        ],
        "file": "dataset.quotes.csv",
        "dataSet": "dataset.quotes"
    }
}

Data Upload

The Data Upload API can be used for uploading the data directly to your Project. Using the resources below, you are able to start data uplaod process with the file package stored on GoodData WebDav Server (secure-di.gooddata.com/uploads/). The package must contain upload_info.json and CSV file for every dataset that you want to upload.

Upload properties

  • pullIntegration : path to directory where your upload package is stored
  • pullTask : asynchronous task that is created for each data upload process

POST

/gdc/md/{project-id}/etl/pull

Start data upload using this resource. As parameter, use the name of WebDav directory, where you uploaded Data. Upload archive should be named upload.zip and must contain upload_info.json (SLI manifest) and CSV file with data. See the Data Model resources to learn about SLI manifest.

Response

200 (OK)
{
   "pullTask" : {
      "uri" : "/gdc/md/{project-id}/etl/task/{task-id}"
   }    
}

GET

/gdc/md/{project-id}/etl/task/{task-id}

This is resource returned by previous POST. Poll it to get the upload status.

Response

200 (OK)
{
   "taskStatus" : "OK | ERROR | WARNING" 
}

GET

/gdc/md/{project-id}/data/uploads/{dataset-object-id}

This resource gives you status of data uploads for specific dataset. You need to specify dataset ID in the end of the URI. This ID can be find in gdc/md/{project-id}/query/datasets resource. See the next resource definition below.

Response

200 (OK)
{
   "dataUploads" : {
      "uploads" : [
         {
            "dataUpload" : {
               "warnings" : [],
               "msg" : null,
               "etlInterface" : "/gdc/md/{project-id}/obj/174",
               "progress" : "1.000",
               "status" : "OK",
               "file" : "upload_info.json",
               "fullUpload" : 1,
               "uri" : "/gdc/md/{project-id}/data/upload/5",
               "createdAt" : "2012-12-14 13:40:36",
               "fileSize" : 155649,
               "processedAt" : "2012-12-14 13:40:38"
            }
         },
         {
            "dataUpload" : {
               "warnings" : [],
               "msg" : null,
               "etlInterface" : "/gdc/md/{project-id}/obj/174",
               "progress" : "1.000",
               "status" : "OK",
               "file" : "upload_info.json",
               "fullUpload" : 1,
               "uri" : "/gdc/md/{project-id}/data/upload/4",
               "createdAt" : "2012-12-14 13:33:39",
               "fileSize" : 78957,
               "processedAt" : "2012-12-14 13:33:40"
            }
         },
         {
            "dataUpload" : {
               "warnings" : [],
               "msg" : null,
               "etlInterface" : "/gdc/md/{project-id}/obj/174",
               "progress" : "1.000",
               "status" : "OK",
               "file" : "upload_info.json",
               "fullUpload" : 1,
               "uri" : "/gdc/md/{project-id}/data/upload/3",
               "createdAt" : "2012-12-14 09:24:42",
               "fileSize" : 144,
               "processedAt" : "2012-12-14 09:24:59"
            }
         },
         {
            "dataUpload" : {
               "warnings" : [],
               "msg" : null,
               "etlInterface" : "/gdc/md/{project-id}/obj/174",
               "progress" : "1.000",
               "status" : "OK",
               "file" : "upload_info.json",
               "fullUpload" : 1,
               "uri" : "/gdc/md/{project-id}/data/upload/2",
               "createdAt" : "2012-12-13 17:06:11",
               "fileSize" : 144,
               "processedAt" : "2012-12-13 17:06:17"
            }
         }
      ],
      "links" : {}
   }
}

GET

/gdc/md/{project-id}/query/datasets

This resource helps you identify datasets in your project. You can easily identify dataset object id in the response.

Response

200 (OK)
{
    "query": {
        "entries": [
            {
                "link": "/gdc/md/{project-id}/obj/14000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Initially Assigned Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/161",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2010-06-16 01:11:00",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Zendesk Tickets",
                "updated": "2011-02-18 19:38:40",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/241",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2010-06-16 01:11:04",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Zendesk Tags",
                "updated": "2011-02-10 16:07:11",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/16000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Last Updated Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/13000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Assigned Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/12000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Solved Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/15000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Due Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            },
            {
                "link": "/gdc/md/{project-id}/obj/10000300",
                "author": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff",
                "tags": "",
                "created": "2009-07-03 14:52:50",
                "deprecated": "0",
                "summary": "",
                "category": "dataSet",
                "title": "Created Date",
                "updated": "2009-07-03 14:52:50",
                "contributor": "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff"
            }
        ],
        "meta": {
            "summary": "Metadata Query Resources for project '{project-id}'",
            "title": "List of datasets",
            "category": "query"
        }
    }
}

Notifications

Notifications allow users to be informed about some specific events in the Project. Notifications are based on Channel Configuration, where user specifies what is the channel, where he wants to send the notification. Second step is a Subscription settings, that will subscribe the user to a specific channel with specific condition for triggering the notification.

Notifications properties

  • channelConfiguration : Specifies the channel configuration configuration
  • username (string) : User's channel login for specific channel
  • password (string) : User's password for specific configuration
  • title (string) : Title of channel configuration
  • author (uri) : URI of user who creates the notification channel
  • created (date) : Date of channel configuration creation
  • updated (date) : Date of channel configuration update
  • from : Phone number of notification sender (for Twillio Channel)
  • to : Phone number of notification recipient (for Twillio Channel)
  • timerEvent (cron Expression) : Specifies the interval for notification check
  • condition : Condition that must be fulfil to send the notification
  • message : Message that is sent via specific channel as notification

POST

/gdc/account/profile/{profile-id}/channelConfigurations

To create new Salesforce Notifications channel use this method

Response

201 (Created)
{
    "channelConfiguration": {
        "configuration": {
            "sfdcChatterConfiguration": {
                "username": "USERNAME@DOMAIN.COM"
            }
        },
        "meta": {
            "title": "Channel Name",
            "author": "/gdc/account/profile/PROFILE_ID",
            "category": "channelConfiguration",
            "updated": "2011-12-20 13:43:17",
            "created": "2011-12-20 13:43:17",
            "uri": "/gdc/account/profile/{profile-id}/channelConfigurations/{channel-id}"
        }
    }
}

POST

/gdc/projects/{project-id}/users/{user-id}/subscriptions

To create new Subscription, call this resource and set the timerEvent, condition expression and message that will be sent

Response

201 (Created)
{
    "subscription": {
        "triggers": [
            {
                "timerEvent": {
                    "cronExpression": "0 0/5 * * * *"
                }
            }
        ],
        "condition": {
            "condition": {
                "expression": "f:executeMetric('/gdc/md/PROJECT_ID/obj/OBJECT_ID') < 0.99"
            }
        },
        "message": {
            "template": {
                "expression": "Custom message % ${f:executeMetric('/gdc/md/PROJECT_ID/obj/OBJECT_ID')} ..."
            }
        },
        "channels": [
            "/gdc/account/profile/USER_ID/channelConfigurations/CHANNEL_ID"
        ],
        "meta": {
            "title": "TEST%",
            "author": "/gdc/account/profile/USER_ID",
            "category": "subscription",
            "updated": "2011-12-20 13:59:23",
            "created": "2011-12-20 13:59:23",
            "uri": "/gdc/projects/PROJECT_ID_/users/USER_ID_/subscriptions/SUBSCRIPTION_ID"
        }
    }
}

Report

Reports can be also handled via API. You can use following resources for getting list of all report, execute selected reports and export it.

Report Properties

  • link (uri) : Link to specific Report
  • author (uri) : URI of Report author
  • tags : Report tags
  • created (date) : Report creation date
  • updated (date) : Report update date
  • summary (string) : Report text summary
  • report (uri) : Specific report URI
  • format : Report export format (pdf, csv, png)

GET

/gdc/md/{project-id}/query/reports

Use this method to list all Reports in given Project

Response

200 (OK)
Content-Type: application/json
{
    "query": {
        "entries": [
            {
                "link": "/gdc/md/{PROJECT_ID}/obj/{OBJECT_ID}",
                "author": "/gdc/account/profile/USER_ID",
                "tags": "",
                "created": "2011-11-23 15:34:18",
                "deprecated": "0",
                "summary": "",
                "title": "Report Title",
                "category": "report",
                "updated": "2011-11-23 15:41:44",
                "contributor": "/gdc/account/profile/{USER_ID}"
            }],
        "meta": {
            "summary": "Metadata Query Resources for project 'PROJECT_ID'",
            "title": "List of reports",
            "category": "query"
        }
    }
}

POST

/gdc/md/{project-id}/obj

You need to create Report Definition using this resource first, then save it as a Report by following API call.

Response

201 (Created)
{
   "uri" : "/gdc/md/nkgwx0onlkq0xrwoadd3fzv9gz2rxzhn/obj/{created-object-id}"
}

POST

/gdc/md/{project-id}/obj

This resource will allow you to save Report Definition as a Report (visible from UI). You need to POST the Report Definition.

Response

201 (Created)
{
   "uri" : "/gdc/md/nkgwx0onlkq0xrwoadd3fzv9gz2rxzhn/obj/{created-report-object-id}"
}

POST

/gdc/xtab2/executor3

Use this method to execute selected Report

Response

201 (Created)
{
   "execResult" : {
      "reportView" : {
         "chart" : {
            "styles" : {
               "global" : {
                  "linetype" : "smooth",
                  "colorMapping" : [
                     {
                        "guid" : "guid8",
                        "uri" : "/gdc/md/{project-id}/obj/199"
                     }
                  ]
               },
               "yui_3_7_1_1_1355414802308_16890" : {
                  "axis" : {
                     "limits" : {
                        "min" : 0,
                        "max" : 75
                     }
                  }
               }
            },
            "buckets" : {
               "y" : [
                  {
                     "id" : "yui_3_7_1_1_1355414802308_16890",
                     "uri" : "metric"
                  }
               ],
               "color" : [],
               "x" : [
                  {
                     "id" : "yui_3_7_1_1_1355414981915_32707",
                     "uri" : "/gdc/md/{project-id}/obj/72"
                  }
               ],
               "angle" : []
            },
            "type" : "area"
         },
         "reportName" : "Mean temperature by date",
         "columnWidths" : [],
         "filters" : [],
         "rows" : [],
         "sort" : {
            "columns" : [],
            "rows" : []
         },
         "oneNumber" : {
            "labels" : {}
         },
         "format" : "chart",
         "columns" : [
            {
               "drillDownStepAttributeDF" : "/gdc/md/{project-id}/obj/62",
               "sort" : "pk",
               "displayFormId" : "/gdc/md/{project-id}/obj/72",
               "attributeTitle" : "Month (Date)",
               "baseElementURI" : "/gdc/md/{project-id}/obj/71/elements?id=",
               "title" : "Month (Date)",
               "attributeId" : "/gdc/md/{project-id}/obj/71",
               "totals" : [
                  []
               ]
            },
            "metricGroup"
         ],
         "metrics" : [
            {
               "format" : "#,##0.00",
               "title" : "Mean Temperature [Min]",
               "metricId" : "/gdc/md/{project-id}/obj/199"
            }
         ]
      },
      "reportDefinition" : "/gdc/md/{project-id}/obj/234",
      "dataResult" : "/gdc/md/{project-id}/dataResult/1468045646021328640"
   }
}

POST

/gdc/exporter/executor

This method can be used for exporting Report. The content of result part is execResult JSON (it has been returned after report computation)

Response

201 (Created)
{
"uri":"/gdc/exporter/result/PROJECT_ID/RESULT_ID"
}

POST

/gdc/app/projects/project_id/execute/raw/

This is API resource for Export big Reports that cannot be computed on the UI.

Response

201 (Created)
{
    "uri":"/gdc/projects/eg9r9fvuyhljjyb2b7wy3h39tkwtfdck/execute/raw/{IDENTIFIER-OF-YOUR-REPORT}"
}

Dashboard

Following resources cover Project Dashboard operation. You can list all Dashboards in Project, GET Dashboard content and update it.

GET

/gdc/md/{project-id}/query/projectdashboards

Use this method to list of all Dashboards in given Project

Response

200 (OK)
{
  "query": {
    "entries": [
      {
        "link": "/gdc/md/{project-id}/obj/{object-id}",
        "author": "/gdc/account/profile/{user-id}",
        "tags": "",
        "created": "2012-08-15 19:41:07",
        "deprecated": "0",
        "summary": "",
        "category": "projectDashboard",
        "title": "Overview",
        "updated": "2012-09-04 15:56:36",
        "contributor": "/gdc/account/profile/{user-id}"
      }
    ],
    "meta": {
      "summary": "Metadata Query Resources for project '{project-id}'",
      "title": "List of projectdashboards",
      "category": "query"
    }
  }
}

GET

/gdc/md/{project-id}/obj/{object-id}

Use this method to GET dashboard object content

Response

200 (OK)
{
    "projectDashboard": {
        "content": {
            "filters": [],
            "tabs": [
                {
                    "title": "Dashboard Name",
                    "identifier": "afblCPlxel0Y",
                    "items": [
                        {
                            "reportItem": {
                                "positionX": 410,
                                "positionY": 0,
                                "sizeX": 530,
                                "sizeY": 310,
                                "style": {
                                    "background": {
                                        "opacity": 0
                                    }
                                },
                                "obj": "/gdc/md/{project-id}/obj/{object-id}",
                                "visualization": {
                                    "oneNumber": {
                                        "labels": {}
                                    },
                                    "grid": {
                                        "columnWidths": []
                                    }
                                },
                                "filters": []
                            }
                        },
                        {
                            "headlineItem": {
                                "positionX": 0,
                                "positionY": 0,
                                "sizeX": 380,
                                "sizeY": 80,
                                "title": "Tržby",
                                "metric": "/gdc/md/{project-id}/obj/{object-id}",
                                "format": "#,##0.00 Kč \n",
                                "filters": [],
                                "filterAttributeDF": "/gdc/md/{project-id}/obj/{object-id}",
                                "linkedWithExternalFilter": 0,
                                "constraint": {
                                    "to": 0,
                                    "from": 0,
                                    "type": "floating"
                                },
                                "trendlineConfig": {
                                    "autoGranularity": 0,
                                    "granularityAttributeDF": "/gdc/md/{project-id}/obj/{object-id}"
                                }
                            }
                        },
                        {
                            "reportItem": {
                                "positionX": 0,
                                "positionY": 350,
                                "sizeX": 940,
                                "sizeY": 360,
                                "style": {
                                    "background": {
                                        "opacity": 0
                                    }
                                },
                                "obj": "/gdc/md/{project-id}/obj/{object-id}",
                                "visualization": {
                                    "oneNumber": {
                                        "labels": {}
                                    },
                                    "grid": {
                                        "columnWidths": []
                                    }
                                },
                                "filters": []
                            }
                        },
                        {
                            "lineItem": {
                                "positionX": 30,
                                "positionY": 320,
                                "sizeX": 880,
                                "sizeY": 10
                            }
                        },
                        {
                            "lineItem": {
                                "positionX": 390,
                                "positionY": 0,
                                "sizeX": 9,
                                "sizeY": 310
                            }
                        },
                        {
                            "textItem": {
                                "positionX": 100,
                                "positionY": 130,
                                "sizeX": 170,
                                "sizeY": 30,
                                "style": {
                                    "background": {
                                        "opacity": 0
                                    }
                                },
                                "textSize": "middle",
                                "text": "Celkem Zákazníků"
                            }
                        },
                        {
                            "reportItem": {
                                "positionX": 80,
                                "positionY": 160,
                                "sizeX": 210,
                                "sizeY": 140,
                                "style": {
                                    "background": {
                                        "opacity": 0
                                    }
                                },
                                "obj": "/gdc/md/{project-id}/obj/{object-id}",
                                "visualization": {
                                    "oneNumber": {
                                        "labels": {
                                            "description": ""
                                        }
                                    },
                                    "grid": {
                                        "columnWidths": []
                                    }
                                },
                                "filters": []
                            }
                        }
                    ]
                }
            ]
        },
        "meta": {
            "uri": "/gdc/md/{project-id}/obj/{object-id}",
            "created": "2012-08-15 19:41:07",
            "updated": "2012-09-03 16:37:57",
            "author": "/gdc/account/profile/{user-id}",
            "contributor": "/gdc/account/profile/{user-id}",
            "summary": "",
            "title": "Overview",
            "category": "projectDashboard",
            "tags": "",
            "deprecated": "0",
            "identifier": "afalCPlxel0Y"
        }
    }
}

POST

/gdc/md/{project-id}/obj/{object-id}

Use this method to create Dashboard object. To Update the Dashboard object, use PUT with the same payload which represents the final state.

Response

200 (OK)
{
  "uri": "/gdc/md/{project-id}/obj/{object-id}"
}

Metadata

project Following resources can be used for exporting/importing selected metadata objects. You will get the import token, that is used for import the metadata to other project.

Metadata Properties

  • partialMDExport (uri) : Specifies metadata objects for export
  • status (uri) : Export result URI
  • token (string) : Export token for Import usage
  • overwriteNewer (boolean) : 1|0 overwrite existing objects
  • updateLDMObjects (boolean) : 1|0 update logical data model objects

POST

/gdc/md/{project-id}/maintenance/partialmdexport

This method is used for partial metadata export

Response

200 (OK)
{
    "partialMDArtifact": {
        "status": {
            "uri": "/gdc/md/PROJECT_ID/tasks/TASK_ID/status"
        },
        "token": "TOKEN_STRING"
    }
}

POST

/gdc/md/{project-id}/maintenance/partialmdimport

Use this method to import exported metadata

Response

200 (OK)
{
"uri" : "/gdc/md/{project-id}/etltask/{task-id}"
}

Mandatory User Filters

Mandatory User Filters (A.K.A MUFs) are the way how you can filter specific data for specific user. It is based on attribute value identifiers and every MUF can be assigned to multiple users.

MUF Properties

  • userFilter : Specifies the user filter object
  • expression : Defines user filter
  • category : Object category
  • title : Specific filter title
  • user (uri) : URI of user, on which filter was defined
  • userFiltersUpdateResult : Successful/Failed user filters
  • created (date) : User Filter object created date
  • updated (date) : User Filter object update date

POST

/gdc/md/{project-id}/obj

Use this method to create new Mandatory User Filter

Response

200 (OK)

POST

/gdc/md/{project-id}/userfilters

Use this method to assign Filter to a User

Response

200 (OK)
{
  "userFiltersUpdateResult": {
      "failed": [],
      "successful": [
           "/gdc/account/profile/PROFILE_ID"
        ]
    }
}

GET

/gdc/md/{project-id}/query/userfilters

Use this method to get a list of Mandatory User Filters

Response

200 (OK)
{
    "query": {
        "entries": [
            {
                "link": "/gdc/md/{project-id}/obj/{filter-object-id}",
                "author": "/gdc/account/profile/{user-id}",
                "tags": "",
                "created": "2012-01-16 11:08:13",
                "deprecated": "0",
                "summary": "",
                "title": "User Filter Name",
                "category": "userFilter",
                "updated": "2012-01-16 11:08:13",
                "contributor": "/gdc/account/profile/{user-id}"
            }
        ],
        "meta": {
            "summary": "Metadata Query Resources for project 'PROJECT_ID'",
            "title": "List of userfilters",
            "category": "query"
        }
    }
}

GET

/gdc/md/{project-id}/userfilters?users={user-URI}

To list Mandatory User Filters for selected users, use this API call. You can use multiple user URIs as a parameter. So that you can filter using ...userFilters={user-uri}&{user-uri}&...

Response

200 (OK)
{
    "userFilters": {
        "count": 20,
        "length": 1,
        "offset": 0,
        "items": [
            {
                "userFilters": [
                    "/gdc/md/{project-id}/obj/{object-id}"
                ],
                "user": "/gdc/account/profile/{user-id}"
            }
        ]
    }
}

GET

/gdc/md/{project-id}/userfilters?userFilters={MUF-URI}

To list Users for selected Mandatory User Filters, use this API call. You can use multiple MUF URIs as a parameter. So that you can use ...userFilters={muf-uri}&{muf-uri}&...

Response

200 (OK)
{
    "userFilters": {
        "count": 20,
        "length": 1,
        "offset": 0,
        "items": [
            {
                "userFilters": [
                    "/gdc/md/{project-id}/obj/{object-id}"
                ],
                "user": "/gdc/account/profile/{user-id}"
            }
        ]
    }
}

DELETE

/gdc/md/{project-id}/obj/{muf-object-id}

To DELETE Mandatoy User Filter object

Response

200 (OK)

Dependency

This API can be used to GET all objects that are used by specific object such as dashboard, report etc.

GET

/gdc/md/{project-id}/usedby/{object-id}

Use this method GET all objects that use your given object (specified in the request URI)

Response

200 (OK)
{
   "using" : {
      "edges" : [
         {
            "to" : 5,
            "from" : 38
         },
         {
            "to" : 49,
            "from" : 5
         },      
],
     "nodes" : [
    {
           "link" : "/gdc/md/j41cf2ph664i24r06zvj4f8rcpwoc7z5/obj/3439",
           "author" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
           "created" : "2011-12-22 11:04:45",
           "deprecated" : "0",
           "summary" : "",
           "updated" : "2011-12-22 11:04:46",
           "title" : "Department Salaries - Total",
           "category" : "report",
           "contributor" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d"
         },
{
           "link" : "/gdc/md/j41cf2ph664i24r06zvj4f8rcpwoc7z5/obj/3439",
           "author" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
           "created" : "2011-12-22 11:04:45",
           "deprecated" : "0",
           "summary" : "",
           "updated" : "2011-12-22 11:04:46",
           "title" : "Department Salaries - Total",
           "category" : "report",
           "contributor" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d"
         }
]
     }
}

GET

/gdc/md/{project-id}/using/{object-id}

Use this method GET all objects that are used by specific object

Response

200 (OK)
{
   "using" : {
      "edges" : [
         {
            "to" : 5,
            "from" : 38
         },
         {
            "to" : 49,
            "from" : 5
         },      
],
     "nodes" : [
    {
           "link" : "/gdc/md/j41cf2ph664i24r06zvj4f8rcpwoc7z5/obj/3439",
           "author" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
           "created" : "2011-12-22 11:04:45",
           "deprecated" : "0",
           "summary" : "",
           "updated" : "2011-12-22 11:04:46",
           "title" : "Department Salaries - Total",
           "category" : "report",
           "contributor" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d"
         },
{
           "link" : "/gdc/md/j41cf2ph664i24r06zvj4f8rcpwoc7z5/obj/3439",
           "author" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
           "created" : "2011-12-22 11:04:45",
           "deprecated" : "0",
           "summary" : "",
           "updated" : "2011-12-22 11:04:46",
           "title" : "Department Salaries - Total",
           "category" : "report",
           "contributor" : "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d"
         }
]
     }
}

Object Identifiers

The metadata objects are uniquely identified by the URI and Identifier. You can use this API to transform Identifiers to URI or vice versa. Identifiers doesn’t change when you clone project from master to child.

POST

/gdc/md/{project-id}/identifiers

Use this method transform identifier to URI. See the proper payload.

Response

200 (OK)
{
  "identifiers" : [
    {
      "identifier" : "aavXZuyygoTi",
      "uri" : "/gdc/md/PROJECT_ID/obj/3439"
    }
  ]
}

Reports and Dashboards by Email

Using this API, you can easily schedule the Email, that will be sent to you with a defined Reports and/or Dashboards as an attachment.

POST

/gdc/md/{project-id}/obj

Create new scheduleMail object with following this request

Response

200 (OK)
{"uri":"/gdc/md/{project-id}/obj/58058"}

GET

/gdc/md/{project-id}/query/scheduledmails

List all scheduled emails with this request

Response

200 (OK)
{
    "query": {
        "entries": [
            {
                "link": "/gdc/md/{project-id}/obj/58058",
                "author": "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
                "tags": "",
                "created": "2012-06-05 15:50:25",
                "deprecated": "0",
                "summary": "Daily at 12:00pm PT",
                "category": "scheduledMail",
                "title": "Scheduled report example",
                "updated": "2012-06-05 15:50:25",
                "contributor": "/gdc/account/profile/{profile-id}"
            }
        ],
        "meta": {
            "summary": "Metadata Query Resources for project 'PROJECT_ID'",
            "title": "List of scheduledmails",
            "category": "query"
        }
    }
}

GET

/gdc/md/{project-id}/obj/{object-id}

Get specific scheduled email details

Response

200 (OK)
     {
     "scheduledMail": {
      "content": {
    "body": "Hey, I'm sending you new Reports and Dashboards!",
    "when": {
        "timeZone": "America/Los_Angeles",
        "recurrency": "0:0:0:1*12:0:0",
        "startDate": "2012-06-05"
    },
    "attachments": [
        {
            "reportAttachment": {
                "exportOptions": {
                    "pageOrientation": "landscape"
                },
                "formats": [
                    "pdf",
                    "xls"
                ],
                "uri": "/gdc/md/{project-id}/obj/{report-id}"
            }
        },
        {
            "dashboardAttachment": {
                "uri": "/gdc/md/{project-id}/obj/{dashboard-object-id}",
                "allTabs": 1,
                "tabs": []
            }
        },
        {
            "dashboardAttachment": {
                "uri": "/gdc/md/{project-id}/obj/{dashboard-object-id}",
                "allTabs": 0,
                "tabs": [
                    "aydpARVaburu"
                ]
            }
        }
      ],
      "to": [
        "user.email@gooddata.com"
      ],
      "subject": "Scheduled report"
       },
       "meta": {
          "author": "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d",
          "uri": "/gdc/md/PROJECT_ID/obj/58058",
          "tags": "",
            "created": "2012-06-05 15:50:25",
            "identifier": "aadDxQdneA7Y",
         "deprecated": "0",
         "summary": "Daily at 12:00pm PT",
         "title": "Scheduled report example",
            "category": "scheduledMail",
            "updated": "2012-06-05 15:50:25",
         "contributor": "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d"
          }
      }
    }

Data Loading Processes

Processes

List Processes in a project

GET

/gdc/projects/{project-id}/dataload/processes

Response

200 (OK)
Content-Type: application/json
{
    "processes" : {
        "items" : [ {
            "process" : {
                "name" : "some_transformation",
                "executables" : [ "graph/downloader.grf", "graph/gd_load.grf", "graph/jsons_parser.grf", "graph/run.grf", "graph/transform.grf" ],
                "links" : {
                    "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
                    "executions" : "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions"
                }
            }
        } ]
    }
}

Create new Process

POST

/gdc/projects/{project-id}/dataload/processes

Use this resource to create new data loading process. Before doing this request, you have to archive (.zip) all your CloudConnect Project files (workspace.prm...) and folders (graph, meta, ...) and upload the archive file to the WebDAV server (https://na1-di.gooddata.com/uploads/).

Response

201 (Created)
Content-Type: application/json
{
    "process" : {
        "name" : "Process Name",
        "executables" : [
            "graph/simple.grf",
            "graph/simpleNoParam.grf"
        ],
        "links" : {
            "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
            "executions" : "/gdc/{project-id}/dataload/processes/{process-id}/executions"
        }
    }
}

Create new Process - multipart upload

POST

/gdc/projects/{project-id}/dataload/processes

Use this resource to create new data loading process with one single multipart http request. You have to archive (.zip) whole CloudConnect Project and send both metadata (json) and data as separated parts of the same request.

Response

201 (Created)
Content-Type: application/json
{
    "process" : {
        "name" : "Process Name",
        "executables" : [
            "graph/simple.grf",
            "graph/simpleNoParam.grf"
        ],
        "links" : {
            "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
            "executions" : "/gdc/{project-id}/dataload/processes/{process-id}/executions"
        }
    }
}

User Processes

List Processes of the given User in all Projects

GET

/gdc/account/profile/{user-id}/dataload/processes

Response

200 (OK)
Content-Type: application/json
{
    "processes" : {
        "items" : [ {
            "process" : {
                "name" : "some_transformation",
                "executables" : [ "graph/downloader.grf", "graph/gd_load.grf", "graph/jsons_parser.grf", "graph/run.grf", "graph/transform.grf" ],
                "links" : {
                    "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
                    "executions" : "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions"
                }
            }
        } ],
        "links": {
            "self": "/gdc/account/profile/{user-id}/dataload/processes"
        }
    }
}

Process

Get Process metatada

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}

Response

201 (Created)
Content-Type: application/json
{
    "process" : {
        "name" : "name",
        "executables" : [
            "graph/simple.grf",
            "graph/simpleNoParam.grf"
        ],
        "links" : {
            "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
            "executions" : "/gdc/{project-id}/dataload/processes/{process-id}/executions"
        }
    }
}

Update Process

PUT

/gdc/projects/{project-id}/dataload/processes/{process-id}

The workflow to update existing data loading process is the same as when you're creating new one. This resource requires updated process archive to be already uploaded to WebDAV.

Response

201 (Created)
Content-Type: application/json
{
    "process":{
        "name" : "Process Name",
        "executables" : [
            "graph/simple.grf",
            "graph/simpleNoParam.grf"
        ],
        "links" : {
            "self" : "/gdc/projects/{project-id}/dataload/processes/{process-id}",
            "executions" : "/gdc/{project-id}/dataload/processes/{process-id}/executions"
        }
    }
}

Update Process - multipart upload

POST

/gdc/projects/{project-id}/dataload/processes/{process-id}

Use this resource update existing data loading process with one single multipart http request. You have to archive (.zip) whole CloudConnect Project and send both metadata (json) and data as separated parts of the same request. Note: notice the use of POST method instead of PUT - POST is the only one supported for multipart uploads.

Remove Process

DELETE

/gdc/projects/{project-id}/dataload/processes/{process-id}

Response

204 (No Content)

Process Source

Download Process archive

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/source

Response

303 (See Other)
Location: {url-from-which-process-archive-can-be-downloaded}

Process Executions

List Executions of a Process

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions{?offset,limit}

Parameters
Name Description Details
offset

offset of the first record

int, optional
default: 0
limit

maximal number of records

int, optional
default: 100

Response

200 (OK)
Content-Type: application/json
{
    "executions": {
        "paging": {
            "offset": 0,
            "count": 2
        },
        "items": [
            {
                "executionDetail": {
                    "status": "OK",
                    "created": "2014-02-27T08:25:40.327Z",
                    "started": "2014-02-27T08:25:51.490Z",
                    "updated": "2014-02-27T08:37:50.768Z",
                    "finished": "2014-02-27T08:37:50.640Z",
                    "links": {
                        "poll": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}",
                        "self": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/detail",
                        "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log"
                    }
                }
            },
            {
                "executionDetail": {
                    "status": "ERROR",
                    "created": "2014-02-24T19:00:35.999Z",
                    "started": "2014-02-24T19:00:39.155Z",
                    "updated": "2014-02-24T19:26:13.197Z",
                    "finished": "2014-02-24T19:26:13.060Z",
                    "error" : {
                        "errorCode" : "executor.error",
                        "message" : "Error message with some placeholders for parameters - like %s.",
                        "parameters" : [ "this one" ]
                    }
                    "links": {
                        "poll": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}",
                        "self": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/detail",
                        "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log",
                        "data": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/data"
                    }
                }
            }
        ]
    }
}

Execute Process

POST

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions{?offset,limit}

Response

201 (Created)
Location: /gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}
Content-Type: application/json
{
    "executionTask" : {
        "link" : {
            "poll" : "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}",
            "detail" : "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/detail"
        }
    }
}

Process Execution

Poll for basic Execution status

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}

Returns status code 202 Accepted if execution is still running and 204 No Content if it has already finished.

Response

204 (No Content)

Response

202 (Accepted)

Stop running Execution

DELETE

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}

Can be used to stop execution that's currently in progress.

Response

204 (No Content)

Process Execution Detail

Get Execution metadata

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/detail

Response

200 (OK)
Content-Type: application/json
{
    "executionDetail": {
        "status": "OK",
        "created": "2014-02-27T08:25:40.327Z",
        "started": "2014-02-27T08:25:51.490Z",
        "updated": "2014-02-27T08:37:50.768Z",
        "finished": "2014-02-27T08:37:50.640Z",
        "links": {
            "poll": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}",
            "self": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/detail",
            "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log"
        }
    }
}

Process Execution Log

Get Execution log

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log

Supports range requests that retrieve only part of execution log. If no range is given, the response status is 200 OK and response body contains full log.

Response

206 (Partial Content)
Content-Range: 0-999/6971
Content-Length: 1000
Content-Type: text/plain
The first 1000 bytes of execution log in text/plain

Process Execution Data

Download Execution data

GET

/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/data

Allows you to download data (both executables and any locally downloaded data) of a failed execution for inspection & debugging.

Response

302 (Found)
Location: {url-from-which-execution-data-can-be-downloaded}

Schedules

Schedules

List Project Schedules

GET

/gdc/projects/{project-id}/schedules{?offset,limit}

Parameters
Name Description Details
offset

offset of the first record

int, optional
default: 0
limit

maximal number of records

int, optional
default: 100

Response

200 (OK)
Content-Type: application/json
{
    "schedules": {
        "paging": {
            "offset": 0,
            "count": 1
        },
        "schedulesLink": "/gdc/projects/{project-id}/schedules",
        "items": [
            {
                "schedule": {
                    "type": "MSETL",
                    "state": "ENABLED",
                    "params": {
                        "PROCESS_ID": "cb91f23d-d5a4-4485-a6de-b92f55285d9e",
                        "EXECUTABLE": "Twitter/graph/twitter.grf"
                    },
                    "cron": "0 0 * * *",
                    "timezone": "UTC",
                    "nextExecutionTime": "2013-11-16T00:00:00.000Z",
                    "lastSuccessful": {
                        "execution": {
                            "startTime": "2013-11-15T00:00:40.355Z",
                            "endTime": "2013-11-15T00:00:49.030Z",
                            "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log",
                            "status": "OK",
                            "trigger": "CRON",
                            "links": {
                                "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{schedule-execution-id}"
                            }
                        }
                    },
                    "lastExecution": {
                        "execution": {
                            "startTime": "2013-11-15T00:00:40.355Z",
                            "endTime": "2013-11-15T00:00:49.030Z",
                            "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log",
                            "status": "OK",
                            "trigger": "CRON",
                            "links": {
                                "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{schedule-execution-id}"
                            }
                        }
                    },
                    "consecutiveFailedExecutionCount": 0,
                    "links": {
                        "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549",
                        "executions": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions"
                    }
                }
            }
        ]
    }
}

Schedule a Process

POST

/gdc/projects/{project-id}/schedules{?offset,limit}

To schedule Data Loading Process. Learn more about scheduling in following article.

Response

201 (Created)

Schedule

Get Schedule

GET

/gdc/projects/{project-id}/schedules/{schedule-id}

Response

200 (OK)
Content-Type: application/json
{ 
    "schedule": {
        "type": "MSETL",
        "state": "ENABLED",
        "params": {
            "PROCESS_ID": "cb91f23d-d5a4-4485-a6de-b92f55285d9e",
            "EXECUTABLE": "Twitter/graph/twitter.grf"
        },
        "cron": "0 0 * * *",
        "timezone": "UTC",
        "nextExecutionTime": "2013-11-16T00:00:00.000Z",
        "lastSuccessful": {
            "execution": {
                "startTime": "2013-11-15T00:00:40.355Z",
                "endTime": "2013-11-15T00:00:49.030Z",
                "log": "/gdc/projects/{project-id}/dataload/processes/cb91f23d-d5a4-4485-a6de-b92f55285d9e/executions/263bf8b6e63810c081a124ab1110839700000142590f38f00000009a/log",
                "status": "OK",
                "trigger": "CRON",
                "links": {
                    "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions/52856427e4b081f4cf4a5c08"
                }
            }
        },
        "lastExecution": {
            "execution": {
                "startTime": "2013-11-15T00:00:40.355Z",
                "endTime": "2013-11-15T00:00:49.030Z",
                "log": "/gdc/projects/{project-id}/dataload/processes/cb91f23d-d5a4-4485-a6de-b92f55285d9e/executions/263bf8b6e63810c081a124ab1110839700000142590f38f00000009a/log",
                "status": "OK",
                "trigger": "CRON",
                "links": {
                    "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions/52856427e4b081f4cf4a5c08"
                }
            }
        },
        "consecutiveFailedExecutionCount": 0,
        "links": {
            "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549",
            "executions": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions"
        }
    }
}

Update Schedule

PUT

/gdc/projects/{project-id}/schedules/{schedule-id}

Response

200 (OK)
Content-Type: application/json
{ 
    "schedule": {
        "type": "MSETL",
        "state": "ENABLED",
        "params": {
            "PROCESS_ID" : "{process-id}",
            "EXECUTABLE" : "graph/run.grf",
            "PARAM1_NAME" : "PARAM1_VALUE",
            "PARAM2_NAME" : "PARAM2_VALUE"
        },
        "cron": "0 15 27 7 *",
        "timezone": "UTC",
        "nextExecutionTime": "2013-11-16T00:00:00.000Z",
        "lastSuccessful": {
            "execution": {
                "startTime": "2013-11-15T00:00:40.355Z",
                "endTime": "2013-11-15T00:00:49.030Z",
                "log": "/gdc/projects/{project-id}/dataload/processes/cb91f23d-d5a4-4485-a6de-b92f55285d9e/executions/263bf8b6e63810c081a124ab1110839700000142590f38f00000009a/log",
                "status": "OK",
                "trigger": "CRON",
                "links": {
                    "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions/52856427e4b081f4cf4a5c08"
                }
            }
        },
        "lastExecution": {
            "execution": {
                "startTime": "2013-11-15T00:00:40.355Z",
                "endTime": "2013-11-15T00:00:49.030Z",
                "log": "/gdc/projects/{project-id}/dataload/processes/cb91f23d-d5a4-4485-a6de-b92f55285d9e/executions/263bf8b6e63810c081a124ab1110839700000142590f38f00000009a/log",
                "status": "OK",
                "trigger": "CRON",
                "links": {
                    "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions/52856427e4b081f4cf4a5c08"
                }
            }
        },
        "consecutiveFailedExecutionCount": 0,
        "links": {
            "self": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549",
            "executions": "/gdc/projects/{project-id}/schedules/521f2fd4e4b0c7fc25afa549/executions"
        }
    }
}

Schedule Executions

List Schedule Executions

GET

/gdc/projects/{project-id}/schedules/{schedule-id}/executions{?offset,limit}

Parameters
Name Description Details
offset

offset of the first record

int, optional
default: 0
limit

maximal number of records

int, optional
default: 100

Response

200 (OK)
Content-Type: application/json
{
    "executions": {
        "paging": {
            "offset": 0,
            "count": 2,
            "next": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions?offset=2&limit=2"
        },
        "items": [
            {
                "execution": {
                    "startTime": "2014-03-02T16:00:21.093Z",
                    "endTime": "2014-03-02T16:00:24.460Z",
                    "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{schedule-execution-id}/log",
                    "status": "OK",
                    "trigger": "CRON",
                    "links": {
                        "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{schedule-execution-id}"
                    },
                    "createdTime": "2014-03-02T16:00:18.963Z"
                }
            },
            {
                "execution": {
                    "startTime": "2014-03-02T15:00:20.184Z",
                    "endTime": "2014-03-02T15:00:23.320Z",
                    "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log",
                    "status": "OK",
                    "trigger": "CRON",
                    "links": {
                        "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{execution-id}"
                    },
                    "createdTime": "2014-03-02T15:00:18.410Z"
                }
            }
        ]
    }
}

Execute Schedule

POST

/gdc/projects/{project-id}/schedules/{schedule-id}/executions{?offset,limit}

Schedule will be placed in execution queue and will run as soon as possible.

Response

200 (OK)
Content-Type: application/json
{
    "execution": {
        "status": "SCHEDULED",
        "trigger": "MANUAL",
        "links": {
            "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{schedule-execution-id}"
        }
    }
}

Delete Schedule

DELETE

/gdc/projects/{project-id}/schedules/{schedule-id}/executions{?offset,limit}

Response

204 (No Content)

Schedule Execution

Get Execution

GET

/gdc/projects/{project-id}/schedules/{schedule-id}/execution

Response

200 (OK)
Content-Type: application/json
{
    "execution": {
        "startTime": "2014-03-02T15:00:20.184Z",
        "endTime": "2014-03-02T15:00:23.320Z",
        "log": "/gdc/projects/{project-id}/dataload/processes/{process-id}/executions/{execution-id}/log",
        "status": "OK",
        "trigger": "CRON",
        "links": {
            "self": "/gdc/projects/{project-id}/schedules/{schedule-id}/executions/{execution-id}"
        },
        "createdTime": "2014-03-02T15:00:18.410Z"
    }
}

CloudConnect Zendesk Connector

Download task properties

  • startDate (DATETIMEISO), download all tickets from this date on
  • zendeskDomain (uri), Zendesk's endpoint
  • outputFile (string), resulting file on WebDAV

POST

/gdc/projects/{project-id}/dataload/download/zendesk/downloadTasks

To create download task

Response

201 (Created)
{"asyncTask":
    {"link":{
        "poll":"/gdc/projects/{project-id}/dataload/download/zendesk/downloadTasks/{task-id}"}
    }
}

GET

/gdc/projects/{project-id}/dataload/download/zendesk/downloadTasks/{task-id}

To get download task (task running)

Response

202 (Accepted)

CloudConnect Google Analytics Connector

Download task properties

  • credentials
    • username - GA user name
    • password - GA user password
  • definition
    • ids - unique table ID, format: ga:XXXX (where XXXX is the Analytics profile ID), required field
    • start date - first date for which user requests data, format: YYYY-MM-DD, required field
    • end date - last date for which user requests data, format: YYYY-MM-DD, required field
    • metrics - list of comma-separated metrics, required field
    • dimensions - list of comma-separated dimensions
    • filters - dimension and metric filters that restricts data returned for user request
    • segment - segments the data for user's request
    • output file - output file on WebDAV (/uploads/...), required field

POST

/gdc/projects/{project-id}/dataload/download/googleanalytics/downloadTasks

Create download task

Response

201 (Created)
{
    "asyncTask": {
        "link": {
            "poll": "/gdc/projects/{project-id}/dataload/download/googleanalytics/downloadTasks/{task-id}"
        }
    }
}

GET

/gdc/projects/{project-id}/dataload/download/googleanalytics/downloadTasks/{task-id}

Get download task (running)

Response

202 (Accepted)

Facebook tokens refreshing

In order to call the Facebook Graph API, it is necessary to have a valid OAuth 2.0 token, which is valid for 60 days only after it has been issued. The purpose of this API is the (per project) management of such Facebook tokens, as well as sending notifications to the user when the token to his account is about to expire.

POST

/gdc/projects/{project-id}/dataload/download/facebook/tokens

Using this request, you can create a new Facebook token request

Response

201 (Created)
{"uri":"/gdc/projects/Project5/dataload/download/facebook/tokens/TokenABC"}

GET

/gdc/projects/{project-id}/dataload/download/facebook/tokens

Obtain all Facebook tokens for a particular project

Response

200 (OK)
{
  "facebookTokens" : {
    "items" : [
      "/gdc/projects/Project5/dataload/download/facebook/tokens/TokenA",
      "/gdc/projects/Project5/dataload/download/facebook/tokens/TokenB" ]
  }
}

GET

/gdc/projects/{project-id}/dataload/download/facebook/tokens/{token-id}

Obtain a specific Facebook token

Response

200 (OK)
{
  "facebookToken" : {
    "id" : "/gdc/projects/Project5/dataload/download/facebook/tokens/TokenABC",
    "email" : "example@example.com",
    "label" : "Facebook account A",
    "facebookAccountId" : "xxffaa5",
    "applicationId" : "123456",
    "issued" : "2013-05-09T11:37:32.778Z",
    "expired" : null,
    "token" : "Some token issued by Facebook",
    "notificationsEnabled" : true,
    "state" : "LONGLIVED",
    "scope" : [ ]
  }
}

PUT

/gdc/projects/{project-id}/dataload/download/facebook/tokens/{token-id}

Update a Facebook token

Response

204 (No Content)

DELETE

/gdc/projects/{project-id}/dataload/download/facebook/tokens/{token-id}

Delete a facebook token

Response

204 (No Content)

Zendesk Connector

Following resources are related to the Zendesk integration connector.

POST

/gdc/projects/{project_id}/connectors/zendesk3/integration

Create new integration by this request

Response

201 (Created)

GET

/gdc/projects/{project_id}/connectors/zendesk3/integration

This Resource gives you existing integration

Response

200 (OK)
{
  "integration" : {
    "projectTemplate" : "/projectTemplates/ZendeskAnalytics/9",
    "active" : false,
    "lastFinishedProcess" : null,
    "lastSuccessfulProcess" : null,
    "runningProcess" : null,
    "links" : {
      "self" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk3/integration",
      "processes" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk3/integration/processes",
      "config" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk3/integration/config"
    },
    "ui" : { }
  }
}

PUT

/gdc/projects/{project_id}/connectors/zendesk3/integration

To update the existing integration

Response

200 (OK)

DELETE

/gdc/projects/{project_id}/connectors/zendesk3/integration

To delete the existing integration

Response

204 (No Content)

GET

/gdc/gdc/projects/{project_id}/connectors/zendesk3/integration/config

To get the navigation structure for existing integration

Response

200 (OK)
{
  "config" : {
    "settingsLink" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk3/integration/config/settings"
  }
}

GET

/gdc/projects/{project_id}/connectors/zendesk3/integration/config/settings

To get the config for existing integration

Response

200 (OK)
{
  "settings" : {
    "apiUrl" : null,
    "syncTime" : "12am",
    "syncTimeZone" : "America/Los_Angeles",
    "type" : "plus",
    "enterpriseLoadInterval" : 60
  }
}

PUT

/gdc/projects/{project_id}/connectors/zendesk3/integration/config/settings

To update the config for existing integration
- apiURL: Zendesk API endpoint

Response

204 (No Content)

POST

/gdc/projects/{project_id}/connectors/zendesk3/integration/processes

To create new integration process

Response

201 (Created)

Zendesk 4 Connector

POST

/gdc/projects/{projectName}/connectors/zendesk4/integration

Create integration resource

Response

201 (Created)
{
    "integration" : {
        "projectTemplate" : "/projectTemplates/ZendeskAnalytics/10",
        "active" : true,
        "lastFinishedProcess" : null,
        "lastSuccessfulProcess" : null,
        "runningProcess" : null,
        "links" : {
            "self" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration",
            "processes" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/processes",
            "settings" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/settings",
        },
        "ui" : { }
    }
}

GET

/gdc/projects/{projectName}/connectors/zendesk4/integration

Retrieve integration resource

Response

200 (OK)
{
    "integration" : {
        "projectTemplate" : "/projectTemplates/ZendeskAnalytics/10",
        "active" : true,
        "lastFinishedProcess" : null,
        "lastSuccessfulProcess" : null,
        "runningProcess" : null,
        "links" : {
            "self" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration",
            "processes" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/processes",
            "settings" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/settings"
        },
        "ui" : { }
    }
}

PUT

/gdc/projects/{projectName}/connectors/zendesk4/integration

Update integration resource

Response

200 (OK)
{
    "integration" : {
        "projectTemplate" : "/projectTemplates/ZendeskAnalytics/10",
        "active" : true,
        "lastFinishedProcess" : null,
        "lastSuccessfulProcess" : null,
        "runningProcess" : null,
        "links" : {
            "self" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration",
            "processes" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/processes",
            "settings" : "/gdc/projects/r8ay5xfrvkns4e2ty9qetkrk0q5nhvo5/connectors/zendesk4/integration/settings",
        },
        "ui" : { }
    }
}

POST

/gdc/projects/{projectName}/connectors/zendesk4/integration/processes

Create integration process

Response

201 (Created)
{
    "uri": "/gdc/projects/r8ay5frvkns4e2ty9qetkrk0q5nhvo/connectors/zendesk4/integration/processes/sd345r4et45t5"
}

GET

/gdc/projects/{projectName}/connectors/zendesk4/integration/settings

Retrieve integration settings

Response

200 (OK)
Content-Type: application/json
{
    "settings": {
        "apiUrl": "https://gooddata.zendesk.com",
        "syncTime": "10am",
        "syncTimeZone": "Europe/Prague",
        "type": "plus"
    }
}

{
    "settings": {
        "apiUrl": "https://gooddata.zendesk.com",
        "type": "enterprise"
    }
}

PUT

/gdc/projects/{projectName}/connectors/zendesk4/integration/settings

Update integration settings

Response

204 (No Content)

White Labeling

The following resources are related to the white labeling functionality. Organization administrators and owners can use them to customize the appearance of their applications.

GET

/gdc/organizations/{organization-name}/settings

To GET current Whitelabeling settings

Response

200 (OK)
{
"settings":{
"mailSettings":{
"noReplyEmail":"1noreply@gdc.com",
"registrationEmail":"2reg@gdc.com",
"invitationEmail":"3inv@gdc.com",
"bccEmail":"4bcc@gdc.com",
"supportEmail":"5support@gdc.com",
"supportPhone":"+420 123 456 789"
},
"portalSettings":{
"applicationTitle":"Custom analytics",
"faviconUrl":"/favicon",
"organizationName":"My organization",
"displayFlashNews":false,
"logoUrl":"http://www.website.com/mynewlogo.jpg",
"displayProjects":false,
"displayAccountPage":true,
"supportEmail":"support@bear.com",
"supportForumUrl":"/link/to/support/forums",
"privacyPolicyUrl":"/privacyPolicy",
"documentationUrl":"/help/link",
"securityStatementUrl":"/security",
"termsOfUseUrl":"/tos",
"trustUrl":"/trust",
"headerBackgroundUrl":"http://www.website.com/mynewlogo.jpg",
"appleTouchIconUrl":"/icon.png",
"applicationBackgroundColor":"#999",
"hideRegistration":"true | false",
"applicationBackgroundUrl":"http://www.fws.gov/home/feature/2006/polar_bear_scott_schliebe_usfws.jpg"
  }
 }
}

PUT

/gdc/organizations/{organization-name}/settings

To Update current Whitelabeling settings

Response

204 (No Content)