This document provides technical specifications and operational guidance concerning the utilisation of the Vertice Public API.
The Public API acts as a proxy, interfacing with Vertice's internal APIs. The architecture guarantees that only officially supported functionalities are accessible externally, preserving system stability and ensuring backward compatibility.
The Public API is the only officially supported interface for external system integrations. Direct interaction with internal APIs, such as through the exploitation of browser-derived authentication tokens, remains explicitly unsupported and will fail without prior notification.
Supported Use Cases
Initiation of New Requests: Initiates specified procurement processes through API calls.
SaaS - Contract Renewal:
urn:verticeone:vertice:{{account_id}}:services:service/saas/renewal/generic/v4SaaS - New Purchase:
urn:verticeone:vertice:{{account_id}}:services:service/saas/purchase/v4Endpoint:
POST /accounts/{accountId}/procurement/requests
Initiation of new requests using this endpoint is now deprecated and should not be used. Replace any uses with Invoke API trigger calls
Retrieval of Request Status: Enables querying for the status of a previously created request.
Endpoint:
GET /accounts/{accountId}/procurement/requests/{requestId}
List active vendors: Enables to obtain list of active vendors.
Endpoint:
GET /accounts/{accountId}/vendors
Bulk create Vendors: Allows to create vendors in bulk.
Endpoint:
POST /accounts/{accountId}/vendors
Get Vendor details: Allows to retrieve the details of a specific vendor.
Endpoint:
GET /accounts/{accountId}/vendors/{vendorUrn}
Update existing Vendor: Allows to update details of a specific vendor.
Endpoint:
PATCH /accounts/{accountId}/vendors/{vendorUrn}
Update existing Vendors in bulk: Allows to update multiple vendors at the same time
Endpoint:
PATCH /accounts/{accountId}/vendors
Invoke API trigger: Invokes an API trigger configured in the Workflow Configuration
Endpoint:
POST /accounts/{accountId}/workflows/trigger/{triggerUrn}/invoke
Prerequisites
To use the Vertice Public API, the following features must be activated in the customer account:
Requests
Intelligent Workflows (
INTELLIGENT_WORKFLOWS)Vertice API (
VERTICE_API)
Vendors
Vertice API (
VERTICE_API)Vendor Directory (
VENDOR_DIRECTORY)
Configuration
Open Vertice, and click on the Integrations section.
Open the API Access tab.
Scroll down to configured tokens
Authentication
The API authentication is a token-based mechanism, specifically employing Bearer tokens.
Generating Tokens
From the Vertice API subsection under Connectors, click the “Add Token” button.
Assign a token name.
Specify the operational scopes associated with the token. These scopes define the actions that can be executed by the token. Note that the current available scopes are statically defined.
Important: The generated token must be copied and stored in a secure repository immediately – it will not be accessible after this.
Using Tokens
Add the token into the Authorization header field of all API requests:
curl -X POST \ https://api.vertice.one/accounts/{accountId}/procurement/requests \ -H 'Authorization: Bearer YOUR_API_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "serviceRef": "...", "input": { ... } }'
Token Management
Expiration: Authentication tokens are valid for one year from the date of issue.
Revocation: Tokens can be revoked through the Vertice platform at any time. To deactivate a token, select the revocation control on the tile. Once invalidated, tokens cannot be used.
Regeneration/Renewal: For security reasons, existing tokens cannot be regenerated or renewed. Should a token approach its expiration date or its integrity be compromised, the token must be revoked, and a new token subsequently generated.
Token Visibility: Currently valid tokens are displayed by default. The display can be adjusted to include expired or revoked tokens as needed.
Sorting: The list of tokens is sortable based on multiple criteria, such as creation date and assigned name.
Starting a request
Since deprecation of the create request endpoint, this is the new default way any requests should be started
Go to workflows configuration
Click +
Select Create new trigger
In Type choose API trigger
Configure name, schema and other fields
Click create
Integrate any desired workflow to this trigger
Invoke the trigger using the
invoke-triggerendpoint, if everything is set up correctly, the request on the integrated workflow should successfully be started
API trigger Schema
The data structure, or schema, required for invoing an API triggger is dependent upon the specific trigger that you need to invoke.
Finding the Schema
In the Vertice Workflow configuration open Triggers > API and click the desired trigger. Click on the trigger in the canvas and on the right side in the trigger properties panel, you can see and edit the defined schema.
Understanding the Schema
The schema serves as a formal specification for constructing the input object contained within the JSON payload submitted to the POST /accounts/{accountId}/workflows/trigger/{triggerUrn}/invoke endpoint. This specifies all necessary input parameters for the specific trigger designated by the triggerUrn identifier.
Invoking a trigger
Look up the appropriate api endpoint in the trigger properties panel in workflow configuration page.
Construct the JSON payload, including the
inputobject, ensuring strict conformance of theinputobject to the specifications of the retrieved schema.Incorporate the API authentication token within the
Authorization: Bearer <YOUR_API_TOKEN>header field.Specify the
Content-Type: application/jsonheader.
Example Payload
Presented below is an illustrative JSON payload for invoking an API trigger.
{ "input": { "data": 123 } }
Examples
Remember to substitute the placeholder values (like
{accountId},{requestId},{your_jwt_token},{vendorUrn}, and the example request body) with actual valid data when making the calls.You can easily test Public API endpoints by importing OpenAPI (vertice-api.yaml ) specification to Postman.
1. Get Procurement Request Status
This endpoint allows users to retrieve the current status of a specific service request.
Endpoint:
GET /accounts/{accountId}/procurement/requests/{requestId}Description: Retrieves the status of a specific service request.
Curl Example:
curl -X GET 'https://api.vertice.one/public/accounts/{accountId}/procurement/requests/{requestId}' \ -H 'Authorization: Bearer {your_jwt_token}'Example response:
{ "status": "PENDING" }
Notes:
Replace
{accountId}with the actual Account ID.Replace
{requestId}with the actual Request ID.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.Status is one of PENDING, ACTIVE, COMPLETED, CANCELLED, TERMINATED, FAILED
2. Bulk create Vendors
This endpoint allows users to create a new vendors. Vendors are processed one by one. Response contains list of accepted and rejected vendors.
Endpoint:
POST /accounts/{accountId}/vendorsDescription: Allows to create vendors in bulk.
Curl Example:
curl -X POST 'https://api.vertice.one/public/accounts/{accountId}/vendors' \ -H 'Authorization: Bearer {your_jwt_token}' \ -H 'Content-Type: application/json' \ -d '{ "vendors": [ { "name": "My Vendor 1", "category": "Vendor Category", "description": "Vendor Description", "websiteUrl": "https://vendorwebsite.com", "globalVendorUrn": "urn:verticeone:vertice::vendor:vendor/xxx", "primaryContact": { "name": "Foo", "surname": "Bar", "email": "[email protected]", "phone": "1234567890" }, "addresses": [ { "street1": "123 Main St", "street2": "Apt 1", "city": "New York", "state": "NY", "postalCode": "10001", "countrySubdivision": "US-NY", "country": "US", "type": "BILLING" }, { "street1": "742 Evergreen Terrace", "city": "Springfield", "state": "IL", "postalCode": "62704", "countrySubdivision": "US-IL", "country": "US", "type": "SHIPPING" } ], "taxNumber": "CZ123456", "taxNumberType": "SSN", "additionalFields": { "employees": 120 }, "customData": { "internalReference": { "value": "abc123" } } }, { "name": "My Vendor 2", "category": "Vendor Category", "description": "Vendor Description", "websiteUrl": "https://vendorwebsite.com", "globalVendorUrn": "urn:verticeone:vertice::vendor:vendor/xxx" } ] }
Example response
{ "acceptedVendors": [ { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b", "name": "My Vendor 2" } ], "errorVendors": [ { "name": "My Vendor 1", "errorCode": 409, "errorMessage": "Vendor already exists" } ] }Notes:
Replace
{accountId}with the actual Account ID.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.The JSON data (
-d) should contain the the list of vendors to create. Thenameof the vendor is required, other parameters are optional. You are allowed to create 1 to 1000 vendors in single request.The response status code comes back as 207. The response object contains list of successfully created vendors (
acceptedVendors) and list of rejected vendors (errorVendors).A single batch can contain a maximum of 100 entries.
3. Get Vendor details
This endpoint allows users to obtain info about specific vendor. Endpoint supports two response formats controlled by include query parameter.
Endpoint:
GET /accounts/{accountId}/vendors/{vendorUrn}Query Parameters:
include
base (default)
full
Description: Allows to retrieve the details of a specific vendor.
Curl Example:
curl -X GET 'https://api.vertice.one/public/accounts/{accountId}/vendors/{vendorUrn}' \ -H 'Authorization: Bearer {your_jwt_token}'
Example response
Base Model
{ "vendor": { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b", "id": "2688f4c4-0ffa-499f-a90e-0073eac4de0b", "tenant": "fb1c6240-9edd-48f0-872a-0fd9a6aef48b", "globalVendorUrn": null, "name": "My Vendor 2", "category": null, "status": "ACTIVE" } }Full Model
{ "vendor": { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b", "id": "2688f4c4-0ffa-499f-a90e-0073eac4de0b", "tenant": "fb1c6240-9edd-48f0-872a-0fd9a6aef48b", "globalVendorUrn": null, "name": "My Vendor 2", "status": "ACTIVE", "createdAt": "2025-09-23T12:43:26.050804+00:00", "updatedAt": "2025-09-23T12:43:26.050804+00:00", "activatedAt": "2025-09-23T12:43:26.050804+00:00", "lastModifiedBy": "Test User", "category": null, "description": null, "externalId": null, "integrationId": null, "externalRawData": null, "externalRecordCreatedAt": null, "externalRecordUpdatedAt": null, "primaryContact": null, "addresses": [], "taxNumber": null, "taxNumberType": null, "websiteUrl": null, "additionalFields": null }, "computedFields": { "isMutable": true }, "products": [ { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b/product/2688f4c4-0ffa-499f-a90e-0073eac4de1c", "name": "Product 1", "category": null, "description": "Product description" } ] }
Notes:
Replace
{accountId}with the actual Account ID.Replace
{vendorUrn}with actual Vendor URN in encoded format.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.The response status code is 200.
Based on the
includequery parameter you can control the data format returned from the endpoint.
4. Update existing Vendor
This endpoint allows to update properties of an existing vendor.
Endpoint:
PATCH /accounts/{accountId}/vendors/{vendorUrn}Description: Update details of a specific vendor.
Curl Example:
curl -X PATCH 'https://api.vertice.one/public/accounts/{accountId}/vendors/{vendorUrn}' \ -H 'Authorization: Bearer {your_jwt_token}' \ -H 'Content-Type: application/json' \ -d '{ "patchData": { "globalVendorUrn": "urn:verticeone:vertice::vendor:vendor/xxx", "name": "Updated Vendor Name", "category": "Updated Vendor Category", "description": "Updated Vendor Description", "primaryContact": null, "addresses": [], "taxNumber": "CZ123456", "taxNumberType": "SSN", "websiteUrl": "https://updatedvendorwebsite.com", "additionalFields": { "employeesCount": 120 }, "customData": { "NETSUITE_CUSTOM_ID": "netsuite_external_id_123" } } }Example response
{ "vendor": { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b", "id": "2688f4c4-0ffa-499f-a90e-0073eac4de0b", "tenant": "fb1c6240-9edd-48f0-872a-0fd9a6aef48b", "globalVendorUrn": "urn:verticeone:vertice::vendor:vendor/xxx", "name": "Updated Vendor Name", "status": "ACTIVE", "createdAt": "2025-09-23T12:43:26.050804+00:00", "updatedAt": "2025-09-24T14:43:26.050804+00:00", "activatedAt": "2025-09-23T12:43:26.050804+00:00", "lastModifiedBy": "Test User", "category": "Updated Vendor Category", "description": "Updated Vendor Description", "externalId": null, "integrationId": null, "externalRawData": null, "externalRecordCreatedAt": null, "externalRecordUpdatedAt": null, "primaryContact": null, "addresses": [], "taxNumber": "CZ123456", "taxNumberType": "SSN", "websiteUrl": "https://updatedvendorwebsite.com", "additionalFields": { "employeesCount": 120 } } }Notes:
Replace
{accountId}with the actual Account ID.Replace
{vendorUrn}with actual Vendor URN in encoded format.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.The JSON data (
-d) should contain thepatchDataobject with properties to update. All allowed fields to update are listed in request body.The
additionalFieldsandcustomDataattributes follow the RFC7396 semantics.The response status code is 200.
5. Update existing vendors in bulk
This endpoint allows to update properties of multiple vendors per request. The vendors are processed one by one. The returned response only shows successful and rejected vendors, without the updated values.
Endpoint:
PATCH /accounts/{accountId}/vendors/Description: Update details of a list of vendors. Successful edits are returned in the
successfulVendorslist, rejected vendors are returned inerrorVendorslist and each contains an error code and a human readable error message.Curl Example:
curl -X PATCH 'https://api.vertice.one/public/accounts/{accountId}/vendors/' \ -H 'Authorization: Bearer {your_jwt_token}' \ -H 'Content-Type: application/json' \ -d '{ "vendors": [ { "vendorUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b", "patchData": { "globalVendorUrn": "urn:verticeone:vertice::vendor:vendor/xxx", "name": "Updated Vendor Name", "category": "Updated Vendor Category", "description": "Updated Vendor Description", "primaryContact": null, "addresses": [], "taxNumber": "CZ123456", "taxNumberType": "SSN", "websiteUrl": "https://updatedvendorwebsite.com", "additionalFields": { "employeesCount": 120 }, "customData": { "NETSUITE_CUSTOM_ID": "netsuite_external_id_123" } } }, { "vendorUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/00000000-0000-0000-0000-000000000000", "patchData": { "name": "Updated Missing Vendor Name", } } ] }Example response
{ "successfulVendors": [ { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/2688f4c4-0ffa-499f-a90e-0073eac4de0b" } ], "errorVendors": [ { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/00000000-0000-0000-0000-000000000000", "errorCode": "NOT_FOUND", "errorMessage": "Vendor not found" } ] }Notes:
Replace
{accountId}with the actual Account ID.Replace
{vendorUrn}with actual Vendor URN in encoded format.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.The JSON data (
-d) should contain thepatchDataobject with properties to update. All allowed fields to update are listed in request body.The
additionalFieldsandcustomDataattributes follow the RFC7396 semantics.A single batch can contain a maximum of 100 entries.
The response status code is 207.
6. List active vendors
This endpoint returns list of active vendors in specific account. Pagination via query parameters limit and offset is supported.
Endpoint:
GET /accounts/{accountId}/vendorsQuery Parameters:
limit
min 1
max 1000
default 1000
offset
min 0
default 0
Description: Allows users to retrieve the list of vendors associated with a specific account.
Curl Example:
curl -X GET 'https://api.vertice.one/public/accounts/{accountId}/vendors?limit={limit}&offset={offset}' \ -H 'Authorization: Bearer {your_jwt_token}'Example response
{ "vendors": [ { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/6ec48b04-f814-4003-b75e-fe2d61b34201", "name": "My Vendor 2", "category": "Analytics Tools", "status": "ACTIVE", "activatedAt": "2025-09-17T12:27:33.853635+00:00", "description": null }, { "resourceUrn": "urn:verticeone:vertice:fb1c6240-9edd-48f0-872a-0fd9a6aef48b:vendor:vendor/6ec48b04-f814-4003-b75e-fe2d61b34200", "name": "My Vendor 3", "category": "Analytics Tools", "status": "ACTIVE", "activatedAt": "2025-09-17T12:27:33.853635+00:00", "description": "Some description" } ], "metadata": { "totalCount": 150 } }Notes:
Replace
{accountId}with the actual Account ID.Replace
{vendorUrn}with actual Vendor URN.Replace
{limit}and{offset}with required pagination options.Replace
{your_jwt_token}with your valid JWT Bearer token for theAuthorizationheader.The response status code comes back as 200.
Based on the
limitandoffsetquery parameter you can paginate over the vendors.
