Access to the Parallax API is available exclusively to Parallax API customers. To learn more about becoming a Parallax API customer, please reach out to your Customer Success Manager.
All Parallax API calls are made under https://api.getparallax.com and all responses return standard JSON. The following HTTP methods are supported:
- GET
- POST
- PATCH
- DELETE
The API can be accessed by creating a Personal Access Token in the Parallax application.
Personal Access Tokens, once generated, will need to be copied and saved somewhere safe. You will not be able to see the Personal Access Token again after generating. In the event you forget to copy/lose the token, you'll need to create a new one.
Once generated, Personal Access Tokens can be sent in the X-API-KEY header. Each request will require the Personal Access Token to access the API.
We had formerly documented Authorization: Bearer here, but we will reserve that for future use with OAuth/JWTs. Please use the X-API-KEY header for Personal Access Tokens.
curl -H "X-API-KEY: $ACCESS_TOKEN" \
https://api.getparallax.com/v1/projectsParallax enforces rate limits to ensure reliability and fair usage. We maintain the flexibility to adjust the limitations as needed, ensuring they are always set high enough to support the proper functioning of a well-behaved interactive program.
Parallax API uses a Fixed Window strategy, allowing a limited number of requests within a defined time window per user. If this limit is exceeded, the API will return a 429 Too Many Requests response, along with a Retry-After header indicating when it’s safe to retry.
- Rate Limit set to 100 requests within a 60 second window
We recommend clients respect the Retry-After header and implement exponential backoff or retry logic accordingly.
To standardize and simplify data retrieval across listing endpoints, we implement a consistent pagination strategy that includes request parameters, response structure, and default behavior.
All list endpoints accept the following query parameters:
| Parameter | Type | Required | Description | Constraints |
|---|---|---|---|---|
page | Integer | Yes | The page number to retrieve | Must be ≥ 1 |
pageSize | Integer | Yes | Number of items per page | Must be ≥ 1 and ≤ 500 |
Default values:
page:1pageSize:500
Example:
GET /v1/clients?page=2&pageSize=10Responses from paginated endpoints include a paging object with metadata, and a results array with the items for the current page.
{
"count": 1,
"total": 151,
"page": 16,
"total_pages": 16,
"page_size": 10,
"results": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"is_archived": true,
"created_date": "2019-08-24T14:15:22Z",
"modified_date": "2019-08-24T14:15:22Z"
}
]
}| Property | Type | Description |
|---|---|---|
count | Integer | Number of elements returned on the current page |
total | Integer | Total number of elements across all pages |
page | Integer | Current page number |
page_size | Integer | Number of elements per page |
total_pages | Integer | Total number of pages available based on pageSize |
results | Array<T> | List of paged results of type T |
Unless otherwise specified, endpoints follow these standard error responses:
| Status Code | Description |
|---|---|
400 | Bad Request (validation errors) |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
409 | Conflict (business rule failed) |
422 | Unprocessable Entity (process validation) |
429 | Too Many Requests |
500 | Internal Server Error |
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"errors": {
"Name": [
"The 'name' field is required.",
]
},
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400
}HTTP/1.1 409 Conflict
Content-Type: application/json
{
"type": "https://url-to-error/type/description",
"title": "Conflict",
"status": 409,
"detail": "something exists with this name"
}HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{
"type": "https://url-to-error/type/description",
"title": "Unprocessable Entity",
"status": 422,
"detail": "Unable to assign a user to a role that does not exist for this organization."
}HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json
{
"error": "Rate limit exceeded. Please try again in 60 seconds."
}HTTP/1.1 500 Internal Server Error
Content-Type: application/json
{
"title": "Internal Server Error",
"status": 500,
"detail": "An unexpected error occurred. Please try again later."
}