GoodData API Documentation

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 only your GoodData testing account credentials with the Apiary.io tool

Allowed HTTPs requests:

POST   :   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.

Login

To login into the GoodData API, use following calls.

  1. POST your credentials to the login resource in JSON body
  2. SST Token is returned back in SetCookie header
  3. GET the token resource with SST Token in your header to receive TT Token
  4. 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 only your GoodData testing account credentials with the Apiary.io tool

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)
    Content-Type: application/json
    

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
    Content-Type: application/json
    

DELETE

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

For logout the user

Response

200 (OK)
    Content-Type: application/json
    

Project

Project is one of the key entities inside GoodData. When working with GoodData, you basically create analytical projects (datamarts). Metrics, Reports and Dashboards are then created inside Projects.

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
See the next API call for more details. You can create PostgreSQL based Project, which is stil in beta version.

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. Use this API request.

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"
      }
   }
}

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

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

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

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)
    Content-Type: application/json
    

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/3",
            "/gdc/projects/{project-id}/roles/2",
            "/gdc/projects/{project-id}/roles/4",
            "/gdc/projects/{project-id}/roles/1",
            "/gdc/projects/{project-id}/roles/5"
        ],
        "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)
    Content-Type: application/json
    
{
    "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}"
        }
    }
}

DELETE

/gdc/projects/{project-id}

This API call will DELETE your defined project.

Response

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

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
  • status : User's status, can be Enabled or Disabled
  • 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

POST

/gdc/account/domains/{domain-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 DOMAIN admin for provision the user to the Project.

Response

200 (OK)
    Content-Type: application/json
    
{
"uri" : "/gdc/account/profile/{profile-id}"
}

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)
    Content-Type: application/json
    
{"projectUsersUpdateResult":{
    "successful":["/gdc/account/profile/{profile-id}"],
    "failed":[]}
}

POST

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

Use this API call to edit (disable/enable) user in given project.

Response

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

POST

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

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

Response

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

GET

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

Lists all users in a domain

Response

200 (OK)
    Content-Type: application/json
    
{
    "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"
                    }
                }
            }
        ]
    }
}

PUT

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

You are able to update the User information

Response

200 (OK)
    Content-Type: application/json
    

DELETE

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

Use this request to delete User from domain

Response

200 (OK)
    Content-Type: application/json
    

Data 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

POST

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

To manage Logical Data Model

Response

200 (OK)
    Content-Type: application/json
    

POST

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

Use this method to validate Project

Response

201 (Created)
    Content-Type: application/json
    
{"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)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
   "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)
    Content-Type: application/json
    
{
   "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)
    Content-Type: application/json
    
{
   "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)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
    "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/account/profile/{profile-id}/channelConfigurations

To create new Twillio Notifications channel use this method

Response

201 (Created)
    Content-Type: application/json
    
{
    "channelConfiguration": {
        "configuration": {
            "twilioSmsConfiguration": {
                "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/account/profile/{profile-id}/channelConfigurations

To create new Email Notifications channel use this method

Response

201 (Created)
    Content-Type: application/json
    
{
    "channelConfiguration": {
        "configuration": {
            "emailConfiguration": {
                "to": "jirtob@gmail.com"
            }
        },
        "meta": {
            "title": "Email channel test",
            "author": "/gdc/account/profile/{profile-id}",
            "category": "channelConfiguration",
            "updated": "2013-01-04 09:20:00",
            "created": "2013-01-04 09:20:00",
            "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)
    Content-Type: application/json
    
{
    "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"
        }
    }
}

POST

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

Creates Project event triggered notification. Subscribe to the specific channel.
Possible project based events:

  • dataload.process.finish.error
  • dataload.process.finish.ok
  • dataload.process.start
  • dataload.process.schedule

More information about parameters can be found in CloudConnect documentation

Response

201 (Created)
    Content-Type: application/json
    
{
  "subscription" : {
    "triggers" : [ {
      "projectEventTrigger" : {
        "types" : [ "dataload.process.finish.error" ]
      }
    } ],
    "condition" : {
      "condition" : {
        "expression" : "true"
      }
    },
    "subject" : {
      "template" : {
        "expression" : "Load Error"
      }
    },
    "message" : {
      "template" : {
        "expression" : "Data load finished with Error."
      }
    },
    "channels" : [ "/gdc/account/profile/{user-id}/channelConfigurations/{channel-id}" ],
    "meta" : {
      "title" : "ETL Fail",
      "author" : "/gdc/account/profile/{user-id}",
      "category" : "subscription",
      "updated" : "2013-04-22 10:44:16",
      "created" : "2013-04-22 10:44:16",
      "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/xtab2/executor3

Use this method to execute selected Report

Response

201 (Created)
    Content-Type: application/json
    
{
   "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)
    Content-Type: application/json
    
{
"uri":"/gdc/exporter/result/PROJECT_ID/RESULT_ID"
}

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)
    Content-Type: application/json
    
{
  "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)
    Content-Type: application/json
    
{
    "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 update the Dashboard. If you want to change some metadata attribute, you have to send complete JSON payload with Dashboard object.

Response

200 (OK)
    Content-Type: application/json
    
{
  "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) : True/False overwrite existing objects
  • updateLDMObjects (boolean) : True/False update logical data model objects

POST

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

This method is used for partial metadata export

Response

200 (OK)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
"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)
    Content-Type: application/json
    

POST

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

Use this method to assign Filter to a User

Response

200 (OK)
    Content-Type: application/json
    
{
  "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)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    

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}/using/{object-id}

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

Response

200 (OK)
    Content-Type: application/json
    
{
   "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

Response

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

POST

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

Use this method transform identifier to URI

Response

200 (OK)
    Content-Type: application/json
    
{
  "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)
    Content-Type: application/json
    
{"uri":"/gdc/md/{project-id}/obj/58058"}

GET

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

List all scheduled emails with this request

Response

200 (OK)
    Content-Type: application/json
    
{
    "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)
    Content-Type: application/json
    
{
    "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": {
                        "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"
        }
    }
}

CloudConnect Processes

POST

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

Use this API to create new data loading process

Response

201 (Created)
    Content-Type: application/json
    
{
"process":{
"name":"name",
"graphs":[
"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"
  }
 }
}

GET

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

To GET all deployed processes use this API call

Response

200 (OK)
    Content-Type: application/json
    
{
"processes" : {
"items" : [ {
"process" : {
"name" : "some_transformation",
"graphs" : [ "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"
}
}
} ]
}
}

POST

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

To Execute specific data loading process

Response

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

PUT

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

To Update deployed data loading process

Response

201 (Created)
    Content-Type: application/json
    
{
"process":{
"name":"name",
"graphs":[
"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"
  }
 }
}

DELETE

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

To DELETE deployed process

Response

204 (No Content)
    Content-Type: application/json
    

GET

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

To list user specific processes

Response

200 (OK)
    Content-Type: application/json
    
{
    "processes": {
        "items": [
            {
                "process": {
                    "name": "Reporting - GoodData",
                    "graphs": [
                        "Box Reporting - GoodData/graph/Graph2.grf",
                        "Box Reporting - GoodData/graph/Graph1.grf"
                    ],
                    "links": {
                        "self": "/gdc/projects/dr6p6hksxg7h2myy8rns5ayyjxxs3sfr/dataload/processes/7fa22f0a-0754-40c3-9727-5bf2333aa6c5",
                        "executions": "/gdc/projects/dr6p6hksxg7h2myy8rns5ayyjxxs3sfr/dataload/processes/7fa22f0a-0754-40c3-9727-5bf2333aa6c5/executions"
                    }
                }
            },
            {
                "process": {
                    "name": "Getting Started with CC",
                    "graphs": [
                        "Getting Started with CC/graph/quotes.grf"
                    ],
                    "links": {
                        "self": "/gdc/projects/g9pkzebsm83djrijlv5695yazd7p5fea/dataload/processes/023bb49e-5ecd-482f-bc1d-34588256d671",
                        "executions": "/gdc/projects/g9pkzebsm83djrijlv5695yazd7p5fea/dataload/processes/023bb49e-5ecd-482f-bc1d-34588256d671/executions"
                    }
                }
            }
        ],
        "links": {
            "self": "/gdc/account/profile/2f35048619b7b0ff03f408d2c4b6390d/dataload/processes"
        }
    }
}

CloudConnect Schedules

POST

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

To schedule data loading process

Response

201 (Created)
    Content-Type: application/json
    

PUT

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

To update scheduled process

Response

201 (Created)
    Content-Type: application/json
    

DELETE

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

To DELETE created schedule

Response

204 (No Content)
    Content-Type: application/json
    

Zendesk MSF Connector

Download task properties

  • startDate (DATETIMEISO), download all tickets from this date on
  • zendeskDomain (uri), Zendesk's endpoint
  • outputFile (string), resulting file on WebDAV
  • (timeout (int), timeout of this task, propagated to the taskman ( in seconds inteval <0, 43200>) )

POST

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

To create download task

Response

201 (Created)
    Content-Type: application/json
    
{"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)
    Content-Type: application/json
    

GET

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

To get download task (task finished)

Response

204 (No Content)
    Content-Type: application/json
    

GET

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

To get download task (task failed)

Response

410 (Gone)
    Content-Type: application/json
    

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)
    Content-Type: application/json
    
{"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)
    Content-Type: application/json
    
{
  "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)
    Content-Type: application/json
    
{
  "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)