Overview
Deltek Vantagepoint is a project-based ERP for professional-services firms – projects (with their WBS1/WBS2/WBS3 work-breakdown hierarchy), firms, contacts, employees, marketing campaigns, billing and accounting transactions. The Automize Vantagepoint connector talks to the Vantagepoint REST API so you can automate project and contact creation, CRM sync, employee onboarding, and record lookups directly from a Cloud flow – no bot required. Works against Deltek-hosted (cloud) and on-prem Vantagepoint deployments that expose the Web API.
- Regions: Both Deltek-hosted (cloud) tenants and on-prem installs are supported. The connector calls your own Vantagepoint web-app URL – enter it as the Base URL when you create the connection (e.g. https://vp.example.com/vpweb).
- Plans: Any Vantagepoint deployment with the REST API enabled and an API authorization (client ID/secret) issued. The API module is available on current Vantagepoint releases.
Setting up the connection
Auth type: Bearer Token.
- Ask your Vantagepoint administrator to run the API Authorization Integration Utility and generate a client ID (Consumer Key) and client secret for Automize. Use a dedicated integration identity, not a personal login.
- Confirm the integration user has access to the hubs you want to automate (Projects, Firms, Contacts, Employees) with the right record-level rights.
- In Automize, open Settings → Connectors → Deltek Vantagepoint → Add connection. Enter the Base URL (web-app root, no trailing slash), the Database name, the username + password, and the API client ID + client secret.
- Leave 'Integrated auth' as N unless your install uses Windows-integrated authentication. Leave the pre-issued token blank – Automize mints a bearer token from your credentials automatically.
- Click Test. Automize exchanges your credentials for an access token at {base_url}/token and confirms the connection – a green tick means you're live.
Find your credentials at https://help.deltek.com/product/Vantagepoint/.
Rate limits
Vantagepoint does not publish a fixed public rate limit; throughput depends on your tenant sizing. Automize mints one access token per connection and caches it until shortly before expiry (re-minting automatically), so a busy flow does not hammer the /token endpoint. For large reads, page with limit/pagesize + offset/page rather than pulling whole hubs in one call.
Data model
Projects are the centre of Vantagepoint, organised as a work-breakdown
hierarchy. Firms and Contacts are the CRM side; Employees are staff.
Firm ──< Contact
│
Employee │
│ ▼
└──> Project (WBS1) ──> Phase (WBS2) ──> Task (WBS3)
│
└──> Activities, Billing, Accounting txns
Most records are addressed by a primary key: a project's WBS1 number, an
employee number, a contact/firm key. List endpoints accept a `fieldfilter`
(comma-separated fields to return) and a raw `filter` (filterhash WHERE
expression). The project hub additionally takes a `wbstype` to pick the
level returned (wbs1 = project, wbs2 = phase, wbs3 = task).Available operations
33 operations available. Click any row to jump to its detail.
| Operation | Category | What it does |
|---|---|---|
| Create Contact | General | Create a contact: POST /api/contact |
| Create Employee | General | Create a employee: POST /api/employee |
| Create Firm | General | Create a firm: POST /api/firm |
| Create Project | General | Create a project: POST /api/project |
| Create Record | General | Create a record: POST /api/{record} |
| Delete Contact | General | Delete a contact by key: DELETE /api/contact/{key} |
| Delete Employee | General | Delete a employee by key: DELETE /api/employee/{key} |
| Delete Firm | General | Delete a firm by key: DELETE /api/firm/{key} |
| Delete Project | General | Delete a project by key: DELETE /api/project/{key} |
| Delete Record | General | Delete a record by primary key: DELETE /api/{record}/{key} |
| Get Activity | General | Fetch one activity by key: GET /api/activity/{key} |
| Get Boilerplate | General | Fetch one boilerplate by key: GET /api/boilerplate/{key} |
| Get Contact | General | Fetch one contact by key: GET /api/contact/{key} |
| Get Employee | General | Fetch one employee by key: GET /api/employee/{key} |
| Get Firm | General | Fetch one firm by key: GET /api/firm/{key} |
| Get Marketing Campaign | General | Fetch one marketing campaign by key: GET /api/marketingCampaign/{key} |
| Get Project | General | Fetch one project by key: GET /api/project/{key} |
| Get Record | General | Fetch one record by primary key: GET /api/{record}/{key} |
| Invoke Custom Procedure | General | Run a custom stored procedure: POST /api/utilities/invokecustom/{proc} |
| List Activities | General | List activities: GET /api/activity |
| List Boilerplates | General | List boilerplates: GET /api/boilerplate |
| List Contacts | General | List contacts: GET /api/contact |
| List Employees | General | List employees: GET /api/employee |
| List Firms | General | List firms: GET /api/firm |
| List Marketing Campaigns | General | List marketing campaigns: GET /api/marketingCampaign |
| List Projects | General | List projects: GET /api/project |
| List Records | General | List records of any type: GET /api/{record} with field/filter/paging query params |
| Refresh Token | General | Re-mint the access token from the stored refresh token |
| Update Contact | General | Update a contact: POST /api/contact |
| Update Employee | General | Update a employee: POST /api/employee |
| Update Firm | General | Update a firm: POST /api/firm |
| Update Project | General | Update a project: POST /api/project |
| Update Record | General | Update a record: POST /api/{record} with the keyed body |
Operations
Create Contact
Create a contact: POST /api/contact
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Create Employee
Create a employee: POST /api/employee
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Create Firm
Create a firm: POST /api/firm
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Create Project
Create a project: POST /api/project
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Create Record
Create a record: POST /api/{record}
| Parameter | Required | Type | Description |
|---|---|---|---|
Record type record | Yes | string | API record/hub segment, e.g. 'project', 'contact', 'employee', 'firm'. |
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Tips
- `record` is the API hub segment (e.g. 'project', 'contact', 'employee', 'firm'); `data` is the field→value body.
- Prefer the named Create actions (Create Project / Contact / Firm / Employee) for the common hubs – Create Record is the escape hatch for any other hub.
Delete Contact
Delete a contact by key: DELETE /api/contact/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Delete Employee
Delete a employee by key: DELETE /api/employee/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Delete Firm
Delete a firm by key: DELETE /api/firm/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Delete Project
Delete a project by key: DELETE /api/project/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Delete Record
Delete a record by primary key: DELETE /api/{record}/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Record type record | Yes | string | API record/hub segment, e.g. 'project', 'contact', 'employee', 'firm'. |
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Get Activity
Fetch one activity by key: GET /api/activity/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Boilerplate
Fetch one boilerplate by key: GET /api/boilerplate/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Contact
Fetch one contact by key: GET /api/contact/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Employee
Fetch one employee by key: GET /api/employee/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Firm
Fetch one firm by key: GET /api/firm/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Marketing Campaign
Fetch one marketing campaign by key: GET /api/marketingCampaign/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Get Project
Fetch one project by key: GET /api/project/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Tips
- `key` is the project's WBS1 number, not an internal id.
- Use `fieldfilter` to return only the fields you map downstream.
Get Record
Fetch one record by primary key: GET /api/{record}/{key}
| Parameter | Required | Type | Description |
|---|---|---|---|
Record type record | Yes | string | API record/hub segment, e.g. 'project', 'contact', 'employee', 'firm'. |
Primary key key | Yes | string | The record's primary key (e.g. a project WBS1 number or an employee number). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Invoke Custom Procedure
Run a custom stored procedure: POST /api/utilities/invokecustom/{proc}
| Parameter | Required | Type | Description |
|---|---|---|---|
Stored procedure proc | Yes | string | Custom stored-procedure name. Deltek requires the 'DeltekStoredProc_' prefix. |
Parameters parameters | No | object | Stored-procedure parameters as a JSON object of name→value. |
Tips
- Deltek requires the custom stored-procedure name to carry the 'DeltekStoredProc_' prefix.
List Activities
List activities: GET /api/activity
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Boilerplates
List boilerplates: GET /api/boilerplate
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Contacts
List contacts: GET /api/contact
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Employees
List employees: GET /api/employee
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Firms
List firms: GET /api/firm
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Marketing Campaigns
List marketing campaigns: GET /api/marketingCampaign
| Parameter | Required | Type | Description |
|---|---|---|---|
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
List Projects
List projects: GET /api/project
| Parameter | Required | Type | Description |
|---|---|---|---|
WBS type wbstype | No | select | For the project hub: the work-breakdown level to return (wbs1=project, wbs2=phase, wbs3=task). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
Tips
- Set `wbstype` to wbs1 for projects, wbs2 for phases, wbs3 for tasks – omitting it returns the project level.
- Trim the payload with `fieldfilter` (e.g. 'WBS1,Name,LongName,Status') instead of pulling every column.
- Page large result sets with `pagesize` + `page` (or `limit` + `offset`) rather than one big read.
List Records
List records of any type: GET /api/{record} with field/filter/paging query params
| Parameter | Required | Type | Description |
|---|---|---|---|
Record type record | Yes | string | API record/hub segment, e.g. 'project', 'contact', 'employee', 'firm'. |
WBS type wbstype | No | select | For the project hub: the work-breakdown level to return (wbs1=project, wbs2=phase, wbs3=task). |
Fields fieldfilter | No | string | Comma-separated list of fields to return (e.g. 'WBS1,Name,LongName'). Omit for all fields. |
Filter filter | No | string | Raw filterhash WHERE expression appended to the query string (e.g. "filterhash[0][Status]=A"). |
Limit limit | No | integer | Maximum number of records to return. |
Page size pagesize | No | integer | Records per page (used with page/offset). |
Offset offset | No | integer | Number of records to skip before returning results. |
Page page | No | integer | 1-based page number (used with pagesize). |
Order by order | No | string | Field(s) to sort by. |
Search type searchType | No | string | Server-side search mode (Vantagepoint-specific). |
Refresh Token
Re-mint the access token from the stored refresh token
No input parameters.
Tips
- Rarely needed in Cloud flows – Automize mints and refreshes the access token automatically before each step. Use this only to force an early re-mint.
Update Contact
Update a contact: POST /api/contact
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Update Employee
Update a employee: POST /api/employee
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Update Firm
Update a firm: POST /api/firm
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Update Project
Update a project: POST /api/project
| Parameter | Required | Type | Description |
|---|---|---|---|
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
Update Record
Update a record: POST /api/{record} with the keyed body
| Parameter | Required | Type | Description |
|---|---|---|---|
Record type record | Yes | string | API record/hub segment, e.g. 'project', 'contact', 'employee', 'firm'. |
Record data data | Yes | object | The record body to create/update, as a JSON object of field→value. |
FAQ
- Do I need a pre-issued access token?
- No. Leave the token field blank and Automize exchanges your username, password and API client ID/secret for a short-lived bearer token at {base_url}/token, caching and refreshing it for you. Supply a token only if your firm mints one out-of-band and wants Automize to use it directly.
- What is the Base URL?
- The Vantagepoint web-app root with no trailing slash (for example https://vp.example.com/vpweb). Automize appends /token for sign-in and /api/... for each action.