Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Resource Query Language (RQL) is a query language used by the Marketplace Platform in its REST API.
The Resource Query Language (or RQL) is used for querying and manipulating resources in the Marketplace Platform's REST API. With RQL, you can filter, sort, paginate, and project data. It is simple to use but flexible enough to handle complex scenarios.
RQL consists of a set of operators that can be classified into three main categories:
Comparison Operators: These perform comparisons like equals, greater than, etc.
Logical Operators: These combine multiple conditions.
Algorithmic Operators: These handle functionalities like sorting and pagination.
Operators are formatted as operator(arg1,arg2,...)
. Complex expressions can be created by nesting these operators.
Suppose you want to list all users with a specific domain. Implementing filtering is essential, and this is where RQL comes in.
To display all users with the first name "Buzz", your GET request would look like this:
the same expression can be written as:
To sort users based on their first name, your GET request would look like this:
To sort in the opposite direction, the '-' operator can be used:
To paginate your results with a limit of 10 users and to retrieve the third page (offset 20):
The first parameter limit=10
expresses the number of users to return
Second parameter offset=20
offsets the starting position in the result set. The first 20 users will be skipped.
To request specific fields, such as forstName
, lastName
, and email
to be included, the select=+
operator can be used:
To request certain fields to be excluded, the select=-
operator can be used:
To search for all users with the firstName starting from 'Bu', the following query can be used:
the operator ilike
performs a case-insensitive search.
Logical operators can be used to combine multiple operators. For example, to filter users with first name "Buzz" and last name "Astral":
In simple cases, a combined expression can also be written in the following form:
To pass special characters (e.g., &^$?) or whitespaces as values to RQL operators, enclose them in either double quotes (") or single quotes (') as shown in the following example:
If you need to include a quotation mark within the value, you can do so by enclosing it with a different type of quotation mark, as shown in the following example:
Allowing you to pass these special symbols as values.
The asterisk (*) character has a special meaning in the ilike
operator, matching zero or more characters in its place from the parameter value. For example, the "*dog" pattern will match strings like "big dog" and "dog," but it will not match "big dog!" because of the exclamation mark.
If you need to use the asterisk (*) character itself in the pattern, you can escape it as '*', as shown in the following example:
The ilike operator in this case will be searching for the literal value “The*” at the beginning of the firstName property.
The Marketplace Platform REST API lets you interact with the platform programmatically. Our API is organized around REST, has predictable resource-oriented URLs, uses JSON-encoded representations, and uses standard HTTP response codes, authentication, and verbs. Use our API to create apps, automate tasks, or build integrations with the platform.
An API (Application Programming Interface) is a set of rules that allows programs to talk to each other and share data and functions in a standard format over the Internet.
REST (Representational State Transfer) is a way to design APIs for distributed systems. When people mention a "REST API", they mean an API that uses the HTTP protocol.
These URLs point to different resources, which can be data like JSON, web pages, audio files, or images. You can perform actions on these resources using HTTP methods like GET, POST, PUT, and DELETE:
GET = Retrieve data
POST = Create new data
PUT = Update existing data
DELETE = Remove data
For example, the Marketplace Platform offers several REST APIs for tasks like managing orders and viewing users and accounts. Each API in our platform works similarly, whether you access it directly over HTTP or through helper libraries in various programming languages.
The Marketplace Platform uses API tokens to authenticate requests. You can view and manage your API keys in the user interface of your account settings. Include your API token in the "Authorization" HTTP header with the "Bearer" prefix for authentication.
For example, the following request could be used to retrieve a list of Buyers:
Your API keys have permissions assigned to them, so keep them secure. Do not share your secret API keys in public areas like GitHub or client-side code.
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.
The Marketplace Platform API expects the content type of API requests to be "application/json" in most cases (except for cases where "multipart/form-data" is used to send attachments)
To communicate successfully with the Marketplace Platform APIs, ensure your API requests are formatted using the "application/json" content type. Using the wrong content type may result in unexpected behavior or errors.
The base endpoint for the Marketplace Platform API is:
All API requests start from that base URL. For example, if you have an endpoint like:
The fully qualified URL that you need to use is:
Use this base endpoint with specific API paths to correctly access the resources and services provided by the Marketplace Platform.
The Resource Query Language (or RQL) is used for querying and manipulating resources in the Marketplace Platform's APIs. With RQL, you can filter, sort, paginate, and project data. It is simple to use but flexible enough to handle complex scenarios.
For example, to display all users with the first name "Buzz", your GET request would look like this:
See Resource Query Language for more details.
Our platform reports errors using HTTP status codes in a standard format, ensuring consistency and clarity. For more details, please see Errors Handling.
Enable the previously disabled object.
When enabled, the account status will change to Active
if the account has ExternalId
assigned or Enabled
otherwise.
Create a new Client or Vendor Account object.
Function | Description |
---|---|
or (<condition1>, <condition2>, ...)
Returns records that satisfy at least one of the specified conditions.
and (<condition1>, <condition2>, ...)
Returns records that satisfy all of the specified conditions.
not (<condition>)
Returns records that do not satisfy the specified condition.
empty ( )
Constant that is used to represent an empty string. Example: /users?firstName=empty()
null ( )
Constant that is used to represent an unassigned ("null") value. Example: /users?firstName=null()
order = +<property1>,-<property2>, ...
Sorts the returned records by <property>
. +
represents the ascending order, while -
represents the descending order.
select = +<property1>, -<property2>, ...
Used to add and remove certain objects from the representation.
offset = <value>
Offsets the starting position in the resulting set.
limit = <value>
Limits the number of returned records by the specified value.
eq (<property>, <value>)
Filters records where <property>
exactly matches the <value>
.
ne (<property>, <value>)
Filters records where <property>
does not match the <value>
.
gt (<property>, <value>)
Filters records where <property>
is greater than the <value>
.
ge (<property>, <value>)
Filters records where <property>
is greater or equal to the <value>
.
lt (<property>, <value>)
Filters records where <property>
is less than the <value>
.
le (<property>, <value>)
Filters records where <property>
is less than or equal to the <value>
.
ilike (<property>, <value>)
Filters records where <property>
contains <value>
as a substring, the comparison is case-insensitive.
in (<property>,(<value1>,<value2>,...))
Filters records where <property>
matches any of the listed <value>s
.
out (<property>,(<value1>,<value2>,...))
Filters records where <property>
matches none of the listed <value>s
.
any (<collection>, <condition>)
Filters records by applying <condition>
to the nested <collection>
.
all (<collection>, <condition>)
Filters records by applying <condition>
to the nested <collection>
.
| string | Primary account identifier. Example: "ACC-1671-0642" |
| string | Relative reference to object on API. Example: "/v1/accounts/accounts/ACC-1671-0642" |
| string | Type of the account (Client, Vendor, Operations) Example: "Client" |
| string | Status of the account (Enabled, Active, Disabled) Example: "Enabled" |
| string | Account name. Example: "Stark Industries" |
| string | Account description. Example: "Our company account" |
| string | External identifier - Customer Discount Group number. Example: "WW-1001111" |
| string | External identifier - Customer Discount Group name. Example: "Stark Industries" |
| string | Service level offered to the account (Essential, Elite, DSC) Example: "Elite" |
| object | Address of the company. Example: |
| string | Relative path to account logo. Example: "/static/accounts/ACC-1671-0642/logo.png" |
| string | Path to company’s website. Example: "https://www.example.com" |
| string | Technical support email for some corner cases. Example: "user@example.com" |
| object | Possible audit events: Created, Updated, Disabled, Enabled, or Activated. Example: |
|
Gets a list of external Buyer objects that can be added to Account
Activate the previously enabled Account object.
Disable the Account object. Disabling prevents users from signing in
Update the Account object.
Create a new Buyer object for the client account.
Validate the Account object.
Get the Buyers collection.
Enable a previously disabled Buyer object.
When enabled, the buyer status will change to Active
if the buyer has ExternalId
assigned or Enabled otherwise.
Update the Buyer object. You can only update the logo and contact fields only.
Delete the Buyer object.
Validate a Buyer object.
id
string
Primary buyer identifier.
Example: "BUY-1234-1234"
href
string
Relative reference to object on API.
Example: "/v1/accounts/buyers/BUY-1234-1234"
status
string
Status: Enabled, Active, Disabled, Deleted
name
string
Buyer's name.
Example: "Stark Industries"
icon
string
Relative path to buyer’s logo.
Example: "/static/accounts/BUY-1234-1234/logo.png"
externalIds
BuyerExternalIdsObject
External identifier.
Example:
address
object
Address of the buyer.
Example:
taxId
string
Buyer's tax ID.
Example: "12-34567890"
account
Buyer’s account object.
sellers
contact
object
Contact person details.
Example:
audit
object
Possible audit events: Created, Updated, Disabled, Enabled, Activated.
Example:
| string | Primary seller identifier. Example: "SEL-1234-1234" |
| string | Relative reference to object on API. Example: "/v1/accounts/sellers/SEL-1234-1234" |
| string | Status: Active , Disabled, Offline , Deleted |
| string | Seller's name. Example: "SoftwareOne USA" |
| string | Relative path to seller’s logo. Example: "/static/accounts/SEL-1234-1234/logo.png" |
| string | External identifier. Example: "WW-CON-123456" |
| object | Address of the seller. Example: |
| string |
|
| object | Possible audit events: Created, Updated, Activated, Disabled, Deactivated, or Deleted Example: |
Get a single Seller object by ID.
Get the Sellers collection.
Disable the Buyer object. Disabled buyers cannot be used in transactions.
Update the seller object, except the seller status. Use the disable, activate, deactivate, and delete endpoints to manage the status.
Get a single Buyer object by ID.
Deactivate a seller.
When a seller is deactivated, the status changes from Active
to Offline
.
Delete the seller object. When deleted, the status changes from Active
to Deleted
.
Disable or deactivate the seller object.
When disabled, the status changes from Active
to Disabled
. Disabled sellers cannot be used in transactions.
Activate a previously deactivated or disabled seller.
When activated, the status changes from Offline
or Disabled
to Active
.
Create a new Seller object.
Get a single licensee object by ID.
Delete the licensee object.
Enable the previously disabled licensee object.
Create a new licensee object.
List Licensee items in the Licensees collection.
Update the licensee object.
You can update the licensee Seller
Object, except the status
(which is managed through the disable
, enable
, delete
endpoints) buyers id
and sellers id.
| string | Primary licensee identifier. Example: "LCE-1234-1234-1234" |
| string | Relative reference to object on API. Example: "/v1/accounts/licensees/LIC-1234-1234-1234" |
| string | Status: Enabled Active, Disabled, Deleted |
| string | Licensee's name. Example: "Stark Industries Finance Dept" |
| string | Relative path to licensee’s logo. Example: "/static/accounts/LIC-1234-1234-1234/logo.png" |
| string | External identifier . Example: "WW-CON-12345678" |
| boolean | Defines whether address should be copied from buyer. Example: "true" |
| object | Address of the licensee. Example: |
| string | Description of the licensee. |
| object | Contact person details. Example: |
|
|
|
| object | Possible audit events: Created, Updated, Activated, Disabled, Deactivated, or Deleted. Example: |
Disable the licensee object.
Get a list of modules in the platform.
Set passwords for non-SSO users during onboarding.
Unblock a previously blocked user.
Block a user.
Get the user groups collection.
Get a single user by ID.
Update a user.
Delete a user group.
Create a user group for the client account.
Get a single user group by ID.
Get a single account user by ID.
id
string
Primary user identifier.
Example: "USR-1671-0642"
href
string
Relative reference to object on API (always /v1/accounts/users/{id}).
Example: "/v1/accounts/users/USR-1671-0642"
email
string
Email address of the user.
Example: "will.smith@softwareone.com"
status
string
Status of the user.
A user can have the Invited or InvitationExpired status only if they haven't joined the account.
name
string
User's name.
Example: "Will Smith"
firstName
string
First name of the user.
Example: "Will"
lastName
string
Last name of the user.
Example: "Smith"
phone
object
User's country code and phone number.
Example:
SSO
bool
Flag if a user logs using SSO.
Example: "true"
acceptedTerms
bool
Flag if user has accepted terms and conditions.
Example: "true"
accounts
List of accounts that user is added to, not returned on users account sub-collection.
Example:
groups
Groups that the user belongs to.
Example:
settings
invitation
object
Added only in context of account (on account sub-collection), and only in case of user being invited.
Example:
invitation.code
string
Invitation code sent to user to invite them to the platform.
Example: "910B14E6CB2343A09CB32F24BBC4BEF1"
invitation.status
string
Invitation status for the user in account.
Example: "Invited"
audit
object
Meaning of audit events: On GLobal User
created
- when user was created (once in lifecycle).
updated
- when user parameters changed last time.
login
- when user last time logged in.
blocked
- when user was blocked last time.
On account subcollection, in additional to above:
invited
- when user was invited into account (dropped on join).
joined
- when user was accepted invitation to account.
access
- when user last time switched to the account context.
Example:
id
string
Primary module identifier.
Example: "MOD-1234"
name
string
Name of the module.
Example: "Invoices"
description
string
Description of the module.
Example: "Invoices module"
accountTypes
string
Defines presence of module for each account type.
Example: ["vendor", "client", "operations"]
isEnabledByDefault
boolean
Defines whether the module is enabled by default.
Example: "true"
isConfigurable
boolean
Defines whether module’s access can be changed.
Example: "true"
Invite a user to the account.
Assign an account user to a specific group.
Get a list of all platform users.
Removes a user from a specific group.
Accepts user invitation to the account.
Deletes a user from the account. The user remains active in the other accounts.
Send new invitation when invite expires.
Create a new token object for the specific account.
Get all users assigned to an account.
Get the API tokens collection.
Update a user group.
| string | Primary group identifier. Example: "UGR-1234-1234" |
| string | Relative reference to object on API. Example: "/v1/accounts/groups/UGR-1234-1234" |
| string | Relative path to token’s logo. Example: "/static/accounts/UGR-1234-1234/logo.png" |
| string | Group name. Example: "Stark Industries" |
| string | Group description. Example: "Stark's marketing group" |
| List of modules available for the group. Example: "Invoices" |
| bool | Indicated if the user group is set as default in the account. There is only one default user-group per account. Example: "true" |
| stats | Statistics of the group. A group can be deleted only if the UsersCount is Example: |
| string | Primary API token identifier. Example: "TKN-1671-0642" |
| string | Relative reference to object on API. Example: "/v1/accounts/accounts/ACC-1671-0642/tokens/TKN-4134-7330" |
| string | Name of the token. Example: "Robot" |
| string | Token description. Example: "Test token" |
| string | Status of the token: Active, Disabled, Deleted |
| At least one modules validation when creating API Token. |
| Account under which the token has been defined. Example: |
| string | Authentication code. |
Enable the specified token object.
Disable the specified token object.
Delete an existing token object.
List items in the Agreements collection.
Get a single Agreement object by ID.
Update the specified token object.
Get a single API token by ID.
Create a new request.
Update some properties (assignee
and externalIDs
) of a request.
Get a list of requests.
Get a single request by ID.
id
string
Primary account user identifier.
Example: "AUSR-5709-0422-8243"
href
string
Relative reference to object on API (always /v1/accounts/account-users/{id}).
Example: "/v1/accounts/account-users/AUSR-5709-0422-8243"
user
account
invitation
Invitation.Status
Invitation information: Invited, Active, InvitationExpired
Example:
groups
List of user groups.
Example:
id
string
Primary account identifier.
Example: "AGR-2119-4550-8674"
href
string
Relative reference to object on API (always /commerce/agreements/{id}).
Example: "/v1/commerce/agreements/AGR-2119-4550-8674"
status
string
The key status of the object. May only be specified on creation - Draft or Provisioning, and cannot be updated with PUT
.
name
string
Agreement name, will be assigned automatically on creation, as {product.name} for
{licensee.name}
but can be changed later.
Example: "Microsoft Office 365 NCE E1"
vendor
client
buyer
seller
licensee
product
listing
Listing
Reference to the listing which allows this agreement.
Example:
authorization
Authorization
Reference to the Authorization object used for the agreement.
Example:
price
Price
The price for the agreement, explains the monthly and yearly prices for the whole agreement, one-time price tags are never included into it. different parts of price object visible to different actors, see Price Object.
Example:
template
Template
Reference to Template object.
Example:
error
ErrorObject
Markup text string explaining reason for provisining failure. Always set on moving status to Failed.
Example:
lines
Lines[]
List of items in Agreement.
Example:
subscriptions
Subscription[]
Example:
parameters.fulfillment
OrderParameterValue []
An object that holds a concise definition of a parameter, its value, and any associated errors.
Example:
parameters.ordering
Order Parameter Object []
An object that holds a concise definition of a parameter, its value, and any associated errors.
Example:
audit
AuditObject
Audit object with possible entries: created, updated, activated, terminated, according to the object's lifecycle.
Possible audit events include Created, Updated, Activated, Terminated, and Failed.
Example:
externalIds
ExternalIdsObject
Set of external IDs.
Example:
| string | Primary Request identifier Example: "REQ-1671-0642" |
| string | Relative reference to object on API (always /v1/commerce/requests/{id}) Example: "/v1/commerce/requests/REQ-1671-0642" |
| string | Status of the request. Example: "Querying" |
| Reference to client Account object. Example: |
| Reference to vendor Account object. Example: |
| User of requester, in client account. Example: |
| User of vendor who is responsible to processing request. Example: |
| Product | Example: |
| ExternalIdsObject | Set of external IDs identifiers. Example: |
| ParameterValue[] | Request ordering parameters values Example: |
| ErrorObject | Error reported by validation procedure. Example: |
| AuditObject | Audit object with possible entries: created, updated, activated, terminated, according to lifecycle of the object. Possible audit events: Created, Updated, and Querying. Example: |
Get a single request message.
id
string
Primary message identifier
Example: "MSG-1212-3434-5656-7878"
href
string
Relative reference to object on API (always /v1/somewhere/items/{id})
Example: "/v1/commerce/requests/REQ-1671-0642/messages/MSG-1212-3434-5656-7878"
type
string
Type of message: User or System.
Example: "User"
content
string
Message contents
Example: "I would agree discount of 5%".
request
Reference to request, never sent in context of the Request - i.e. not set on subcollection /commerce/request/{id}/messages, but will be sent whithout this context.
Example:
audit
AuditObject
Audit object with possible entries: Created.
Example:
General Information on Handling REST API Errors in the Marketplace Platform
All errors reported by the REST API have an HTTP status code and follow the standard format. When an error occurs, the response body usually contains a JSON object with the following fields:
type: [string] A URI reference that identifies the error type, providing a consistent way to categorize errors across different API implementations.
title: [string] A human-readable title or summary of the error.
status: [number] The HTTP status code associated with the error.
detail: (Optional) [string] A detailed human-readable description of the error, providing additional information to help clients understand the issue.
instance: (Optional) [string] A URI reference that identifies the specific occurrence of the error, useful for debugging or tracing purposes.
traceId: (Optional) [string] A unique identifier to trace requests in logs.
errors: (Optional) [key-value] A collection of errors detected by validation logic.
Some of the common errors are listed in the table below.
Get a single Account object by ID.
HTTP status | Description |
---|---|
401 Unauthorized
This means the request lacks valid authentication credentials for the target resource. Check if the Authorization header is present and contains the valid token value.
403 Forbidden
The server understands the request but refuses to authorize it.
404 Not Found
The requested resource could not be found on the server.
409 Conflict
The request could not be completed due to a conflict with the current state of the resource.
415 Unsupported Media Type
The server refuses the request because the payload format is not supported.
500 Internal Server Error
The server encountered an unexpected condition that prevented it from fulfilling the request.
501 Not Implemented
The server does not support the functionality required to fulfill the request.
504 Gateway Timeout
The server, while acting as a gateway or proxy, did not receive a timely response from an upstream server.
Resend an invitation to the user.