How To Access The OData API
Using the Right URL
To access OData web services, you need to use the specific URL of the application.
For instance, if you access the application in the browser from https://companyname.spiraservice.net, then that will be the base of the URL used for accessing the API.
The API URL will be: https://companyname.spiraservice.net/api/odata
If you are viewing this page from your application, the base URL is:
https://api.inflectra.com/spira/services/OData.aspx
Specifying The Data Format
The OData API supported in SpiraPlan is OData v4.0 which is based on JSON,
so you need to use the following content type / accept headers:
-
Content-Type: application/json - Sends data in JSON format
-
accept: application/json - Returns data in JSON format
Authentication
There are three different ways to authenticate with the web service. They all need a username and an api-key. The api-key used is the same as the RSS token created by the application.
You can find a user's RSS token by either going to the user profile (either by visiting your own profile page, or accessing it via the administration panel). If no RSS token is shown for a user, make sure "Enable RSS Feeds" is set to yes.
Copy the full RSS-token / api-key for the relevant user--including the curly braces { }. In the below examples the username "fredbloggs" is used, with an api-key of "{XXXXXXXXXXXXXXXX}"
-
Append the username and application API-Key as an extra querystring parameter:
?username=fredbloggs&api-key={XXXXXXXXXXXXXXXX}
-
Pass in the username application API-Key using the username and api-key HTTP headers:
username: fredbloggs
api-key: {XXXXXXXXXXXXXXXX}
-
Pass in the username and api-key using the standard HTTP basic authentication header:
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXX
where XXXXXXXXXXXXXXXXXXXXXXXXXX is username:api-key base64 encoded
Example OData Calls
Note: OData is primarily designed to allow third-party reporting tools such as PowerBI and Excel to access the data in
SpiraPlan for the purposes of creating custom graphs and reports.
So although we include some examples here of using the raw OData protocol manually, we recommend
that you consider using a tool such as Excel or PowerBI instead.
When you connect to the main OData endpoint URL (e.g. https://companyname.spiraservice.net/api/odata
), you will receive a JSON response containing the list of reportable
views available for querying:
{
"@odata.context":"https://companyname.spiraservice.net/api/odata/$metadata",
"value":[
{
"name":"ArtifactAssociations",
"kind":"EntitySet",
"url":"ArtifactAssociations"
},
{
"name":"ArtifactAttachments",
"kind":"EntitySet",
"url":"ArtifactAttachments"
},
{
"name":"Attachments",
"kind":"EntitySet",
"url":"Attachments"
},
{
"name":"AutomationHosts",
"kind":"EntitySet",
"url":"AutomationHosts"
},
...
{
"name":"Users",
"kind":"EntitySet",
"url":"Users"
}
]
}
From here, you can now add the name of the EntitySet to your URL and then it will display the first 50 rows
of data from the appropriate EntitySet.
For example, if you were to query
https://companyname.spiraservice.net/api/odata/Incidents
, you would see:
{
"@odata.context":"https://companyname.spiraservice.net/api/odata/$metadata#Incidents",
"value":[
{
"INCIDENT_ID":1,
"PROJECT_ID":1,
"INCIDENT_STATUS_ID":1,
"INCIDENT_TYPE_ID":1,
"OPENER_ID":2,
"DESCRIPTION":"When trying to log into the application with a valid username and password, the system throws a fatal exception",
"CREATION_DATE":"2021-03-02T20:04:45.62-05:00",
"CLOSED_DATE":null,
"LAST_UPDATE_DATE":"2021-03-19T20:04:45.62-04:00",
"START_DATE":null,
"COMPLETION_PERCENT":0,
"IS_DELETED":false,
"PRIORITY_NAME":null,
"PRIORITY_COLOR":null,
"SEVERITY_NAME":null,
"SEVERITY_COLOR":null,
"INCIDENT_STATUS_NAME":"New",
"INCIDENT_TYPE_NAME":"Incident",
"OPENER_NAME":"Fred Bloggs",
"OWNER_NAME":null,
"DETECTED_RELEASE_VERSION_NUMBER":"1.0.0.0",
"RESOLVED_RELEASE_VERSION_NUMBER":"1.0.1.0",
"VERIFIED_RELEASE_VERSION_NUMBER":"1.0.1.0",
"PROJECT_GROUP_ID":2,
"PROJECT_NAME":"Library Information System (Sample)",
"CUST_01":null,
"CUST_02":null,
"CUST_03":null,
...
"CUST_99":null,
"NAME":"Cannot log into the application",
"IS_ATTACHMENTS":true,
"COMPONENT_IDS":null,
"INCIDENT_STATUS_IS_OPEN_STATUS":true,
"PROJECT_IS_ACTIVE":true,
"CONCURRENCY_DATE":"2021-03-19T20:04:45.62-04:00",
"END_DATE":null,
"DETECTED_BUILD_NAME":null,
"RESOLVED_BUILD_NAME":null
},
...
{
"INCIDENT_ID":2,
"PROJECT_ID":1,
"INCIDENT_STATUS_ID":1,
"INCIDENT_TYPE_ID":1,
"OPENER_ID":3,
"DESCRIPTION":"When I try and click on the button to add a new author the system simply displays the main screen and does nothing",
"CREATION_DATE":"2021-03-02T20:04:45.62-05:00",
"CLOSED_DATE":null,
"LAST_UPDATE_DATE":"2021-03-07T20:04:45.62-05:00",
"START_DATE":null,
"COMPLETION_PERCENT":0,
"IS_DELETED":false,
"PRIORITY_NAME":null,
"PRIORITY_COLOR":null,
"SEVERITY_NAME":null,
"SEVERITY_COLOR":null,
"INCIDENT_STATUS_NAME":"New",
"INCIDENT_TYPE_NAME":"Incident",
"OPENER_NAME":"Joe P Smith",
"OWNER_NAME":null,
"DETECTED_RELEASE_VERSION_NUMBER":"1.0.0.0",
"RESOLVED_RELEASE_VERSION_NUMBER":"1.0.1.0",
"VERIFIED_RELEASE_VERSION_NUMBER":"1.0.1.0",
"PROJECT_GROUP_ID":2,
"PROJECT_NAME":"Library Information System (Sample)",
"CUST_01":null,
"CUST_02":null,
"CUST_03":null,
...
"CUST_99":null,
"NAME":"Not able to add new author",
"IS_ATTACHMENTS":false,
"COMPONENT_IDS":"2",
"INCIDENT_STATUS_IS_OPEN_STATUS":true,
"PROJECT_IS_ACTIVE":true,
"CONCURRENCY_DATE":"2021-03-07T20:04:45.62-05:00",
"END_DATE":null,
"DETECTED_BUILD_NAME":null,
"RESOLVED_BUILD_NAME":null
},
],
"@odata.nextLink":"https://companyname.spiraservice.net/api/odata/Incidents?$skip=50"
}
Advanced Querying Options
The OData protocol lets you perform standard querying on the data, including filtering, sorting
and pagination. These are done using special operators that get added to the querystring:
Filtering
To filter data using OData,
you simply use the $filter=
operator in the URL. A simple example is shown below for filtering
the list of incidents to be only those that are priority "1 - High":
https://companyname.spiraservice.net/api/odata/Incidents?$filter=PRIORITY_NAME eq '2 - High'
Sorting
To sort data using OData,
you simply use the $orderby=
operator in the URL. A simple example is shown below for sorting
the list of incidents by priority:
https://companyname.spiraservice.net/api/odata/Incidents?$orderby=PRIORITY_NAME asc
Other Query Operators
For more information on querying OData, please refer to the following guide:
https://www.odata.org/getting-started/basic-tutorial/#queryData