Why use the Savio API?
You can use the Savio API to:
- Send feedback to Savio programmatically.
- Connect Savio with integration services like Zapier.
- Sync customer data from system Savio doesn't integrate with so you can easily assign and filter feedback.
Copy API Reference for AI
Copy and paste the text below into ChatGPT, Claude, or another AI assistant to give it full context about the Savio API.
Authentication
The Savio API uses token based authentication. You can find your API token on your API Settings page.
When using the API as a webhook target in Zapier or similar service you need to include your API Token as an HTTP header:
| HTTP Header | Value |
|---|---|
Authorization |
Token YOUR_TOKEN_VALUE |
Note that the value of the Authorization header must include the word Token followed by a space and then your API token.
API Reference
Feedback
Feedback can be created.
Create Feedback
Feedback can be created via a POST to https://www.savio.io/app/api/create-feedback/.
HTTP Response Codes
| Result | Response Code | Value |
|---|---|---|
| Success | 201 | {"id": id_of_new_feedback} |
| Failed to authenticate | 401 | |
| Failed to create feedback | 400 |
Parameters
| Parameter | Required | Description |
|---|---|---|
| problem | Yes | The text describing the problem the user is having. |
| feedback_type | No |
The type of customer that provided the feedback. Valid values are:
|
| state | No Defaults to ACTIVE |
The triage state of this piece of feedback. Valid values are:
|
| source_url | No | An optional URL that links back to the original source of the feedback. |
| source_username | No | An optional name of the user who added the feedback piece. |
| person_email | No | The email address of the person the feedback came from. If there is an existing person with that email address the feedback will be linked to that person. If there isn't an existing person with that email address a new person will be created. |
| person_name | No | The full name of the person the feedback came from. If there isn't a person with that a new person will be created. |
| company_name | No | The name of the company the person is associated with. If there is an existing company with that name the person will be linked to that company. If there isn't an existing company with that name a new company will be created. If person_name or person_email isn't included company_name will be ignored. |
| feature_request_title | No | The title of the feature request to link the new piece of feedback to. If a feature request with that title already exists the existing feature request will be used. Otherwise a new feature request will be created. |
| tags | No | A list of strings that are the titles of the tags you link to the new piece of feedback. If the tags don't exist they will be created. |
Example
curl https://www.savio.io/app/api/create-feedback/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"problem": "You need a Zapier integration so I can wire up Google Forms.",
"feedback_type": "ACTIVE",
"person_email": "bob@example.com",
"state": "ACTIVE",
"feature_request_title": "Feedback API",
"tags": ["red", "green"]
}'
Feature Requests
curl https://www.savio.io/app/api/create-feedback/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"problem": "You need a Zapier integration so I can wire up Google Forms.",
"feedback_type": "ACTIVE",
"person_email": "bob@example.com",
"state": "ACTIVE",
"feature_request_title": "Feedback API",
"tags": ["red", "green"]
}'
Feature Requests
Feature Requests can be listed and retrieved individually. The fields returned are driven by the columns you have configured on your Feature Request list.
Feature Request model
Every Feature Request always includes the following fields:
| Attribute | Type | Description |
|---|---|---|
| id | integer | The unique identifier for the Feature Request. |
| title | string | The Feature Request title. |
| description | string | The Feature Request description. |
| tags | list | A list of tag objects, each with id and title. |
| roadmaps | list | A list of roadmap placements, each with roadmap (name) and column (name). |
| shipped_at | string | The date the Feature Request was marked as shipped, or null. |
If Product or Product Area is enabled on your account, the following fields are also always included:
| Attribute | Type | Description |
|---|---|---|
| product / product_display | string | The product value and its human-readable label. Included if your plan supports Products and the feature is enabled. |
| product_area / product_area_display | string | The product area value and its human-readable label. Included if your plan supports Product Areas and the feature is enabled. |
Additionally, the response includes dynamic fields based on the columns displayed on your Feature Request list. These may include:
| Attribute | Type | Description |
|---|---|---|
| state / state_display | string | The status value and its human-readable label. |
| priority / priority_display | string | The priority value and its human-readable label. |
| effort / effort_display | string | The effort value and its human-readable label. |
| Requests, Feedback, Companies, Votes | integer | Count columns, if configured. The field name matches the column display name. |
| is_public | boolean | Whether the Feature Request is displayed on voting boards. |
| created / updated | string | Timestamps, if configured as columns. |
| Custom attributes | number | Any numeric filterable attribute columns (e.g. MRR). The field name matches the column display name. |
List Feature Requests
You can get a paged list of Feature Requests by issuing a GET to https://www.savio.io/app/api/feature-requests/.
Response
Returns a paginated list of Feature Request objects.
| Attribute | Type | Description |
|---|---|---|
| next | url | A url to the next page of results or null. |
| previous | url | A url to the previous page of results or null. |
| results | list | A list of Feature Request objects. |
HTTP Response Codes
| Result | Response Code |
|---|---|
| Success | 200 |
| Failed to authenticate | 401 |
Parameters
| Parameter | Required | Description |
|---|---|---|
| search | No | Filters Feature Requests by title. |
| state | No |
Filters Feature Requests by status. Default values (may vary by account):
|
| ordering | No |
Order the results by the specified field. Prefix the field name with - to sort descending.
Allowed values are:
|
| product | No |
Filter by product slug (exact match). Requires the Product feature to be enabled; ignored otherwise.
Values may vary by account. |
| product_area | No |
Filter by product area slug (exact match). Requires the Product Area feature to be enabled; ignored otherwise.
Values may vary by account. |
| tag | No | Filter by tag title (exact match). Values may vary by account. |
| roadmap | No | Filter by roadmap title (exact match). Values may vary by account. |
Note: The product and product_area filters require the respective feature to be enabled on your account. If the feature is not available on your plan, these filters are silently ignored.
Example
curl 'https://www.savio.io/app/api/feature-requests/?state=PLANNED&ordering=-updated' \
-X GET \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
Get Feature Request
curl 'https://www.savio.io/app/api/feature-requests/?state=PLANNED&ordering=-updated' \ -X GET \ -H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json'
Get Feature Request
You can get a single Feature Request by issuing a GET to https://www.savio.io/app/api/feature-requests/{id}/.
Response
Returns a single Feature Request object.
HTTP Response Codes
| Result | Response Code |
|---|---|
| Success | 200 |
| Failed to authenticate | 401 |
| Not found | 404 |
Example
curl 'https://www.savio.io/app/api/feature-requests/123/' \
-X GET \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
Contacts
curl 'https://www.savio.io/app/api/feature-requests/123/' \ -X GET \ -H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json'
Contacts
Contacts can be listed, created and updated.
Contact model
| Attribute | Type | Description |
|---|---|---|
| id | integer | The unique identifier for the Contact which is given by Savio. |
| string | The Contact's email. | |
| name | string | The Contact's name. |
| company | integer | The unique identifier for the associated Company which is given by Savio. |
| company_name | string | The name of the associated company. |
| filterable_attributes | Object | The user supplied attributes which are set for this Contact. |
| created | String | The date the Contact was created in Savio. |
| updated | String | The date the Contact was created in Savio |
List Contacts
You can get a paged list of Contacts by issuing a GET to https://www.savio.io/app/api/users/.
Response
Returns a paginated list of Contact Objects.
| Attribute | Type | Description |
|---|---|---|
| count | integer | The total number of results available. |
| next | url | A url to the next page or results or null. |
| previous | url | A url to the previous page of results or null. |
| results | list | A list of Contact objects. |
HTTP Response Codes
| Result | Response Code | Value |
|---|---|---|
| Success | 201 | |
| Failed to authenticate | 401 |
Parameters
| Parameter | Required | Description |
|---|---|---|
| search | No | Filters list of Contacts by email or name |
| ordering | No |
Order the results by the specified field. Prefix the field name with - to sort descending.
Allowed values are:
|
Example
curl 'https://www.savio.io/app/api/users/?search=example.com&ordering=-updated' \
-X GET \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
Upsert Contact
curl 'https://www.savio.io/app/api/users/?search=example.com&ordering=-updated' \ -X GET \ -H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json'
Upsert Contact
You can create or update a Contact by issuing a POST to https://www.savio.io/app/api/users/.
If a contact with that email address or internal_id already exists in Savio the contact will be updated.
Response
Returns the newly created Contact.
| Attribute | Type | Required | Description |
|---|---|---|---|
| string | No | The Contact's email. | |
| internal_id | string | Yes | The id for the Contact in your system. |
| name | string | Yes | The Contact's full name. |
| company | integer | No | The id of the Company assocated with this contact in Savio. |
| company_internal_id | string | No | The id of the Company associated with this contact in your system. |
| filterable_attributes | object | No | The contact supplied attributes which are set for this Contact. |
HTTP Response Codes
| Result | Response Code | Value |
|---|---|---|
| Success | 201 | |
| Failed to authenticate | 401 |
Example
curl https://www.savio.io/app/api/users/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"name": "New Contact",
"email": "new.contact@example.com",
"internal_id": "1234567",
"company_internal_id": "6",
"filterable_attributes": {
"region": "na"
}
}'
Companies
curl https://www.savio.io/app/api/users/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"name": "New Contact",
"email": "new.contact@example.com",
"internal_id": "1234567",
"company_internal_id": "6",
"filterable_attributes": {
"region": "na"
}
}'
Companies
Companies can be listed, created and updated.
Company model
| Attribute | Type | Description |
|---|---|---|
| id | integer | The unique identifier for the Company which is given by Savio. |
| name | string | The Company's name. |
| internal_id | string | The id of the Company in your system. |
| filterable_attributes | Object | The user supplied attributes which are set for this Company. |
| created | String | The date the Company was created in Savio. |
| updated | String | The date the Company was created in Savio |
List Companies
You can get a paged list of Companies by issuing a GET to https://www.savio.io/app/api/companies/.
Response
Returns a paginated list of Company Objects.
| Attribute | Type | Description |
|---|---|---|
| count | integer | The total number of results available. |
| next | url | A url to the next page or results or null. |
| previous | url | A url to the previous page of results or null. |
| results | list | A list of Company objects. |
HTTP Response Codes
| Result | Response Code | Value |
|---|---|---|
| Success | 201 | |
| Failed to authenticate | 401 |
Parameters
| Parameter | Required | Description |
|---|---|---|
| search | No | Filters list of Companies by name |
| ordering | No |
Order the results by the specified field. Prefix the field name with - to sort descending.
Allowed values are:
|
Example
curl 'https://www.savio.io/app/api/companies/?search=acme&ordering=-updated' \
-X GET \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
Upsert Company
curl 'https://www.savio.io/app/api/companies/?search=acme&ordering=-updated' \ -X GET \ -H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json'
Upsert Company
You can create or update a Company by issuing a POST to https://www.savio.io/app/api/companies/.
If a company with that internal_id already exists in Savio the Company will be updated.
Response
Returns the newly created Company.
| Attribute | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | The Company's name. |
| internal_id | string | Yes | The id for the Compnay in your system. |
| filterable_attributes | object | No | The user supplied attributes which are set for this Company. |
HTTP Response Codes
| Result | Response Code | Value |
|---|---|---|
| Success | 201 | |
| Failed to authenticate | 401 |
Example
curl https://www.savio.io/app/api/companies/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"name": "Acme Corp",
"internal_id": "1234567",
"filterable_attributes": {
"region": "na"
}
}'
curl https://www.savio.io/app/api/companies/ \
-X POST \
-H 'Authorization:Token REPLACE_WITH_YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' -d '
{
"name": "Acme Corp",
"internal_id": "1234567",
"filterable_attributes": {
"region": "na"
}
}'