curl --request PATCH \
--url https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state"
payload = {
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({app_id: '<string>', release: '<string>', assignee_id: '<string>'})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'app_id' => '<string>',
'release' => '<string>',
'assignee_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state"
payload := strings.NewReader("{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"states": [
{
"id": "<string>",
"state": {
"status": "unresolved",
"assignee_id": "<string>",
"resolution": "in_release",
"resolved_app_id": "<string>",
"resolved_release": "<string>",
"resolved_at": "<string>",
"ignore": {
"mode": "forever",
"count": 123,
"seen": 123,
"until": "<string>"
},
"regressed_release": "<string>",
"regressed_at": "<string>",
"regressions": 123,
"updated_via": "console",
"updated_at": "<string>"
}
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Change an issue's state or assignee
Resolve (in a release of one app, or in the next release), ignore (forever, until a count of more occurrences, until a time), reopen, or assign to a member. From a console session; every change is audited. Send Content-Type: application/json.
curl --request PATCH \
--url https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state"
payload = {
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({app_id: '<string>', release: '<string>', assignee_id: '<string>'})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'app_id' => '<string>',
'release' => '<string>',
'assignee_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state"
payload := strings.NewReader("{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}/state")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"states": [
{
"id": "<string>",
"state": {
"status": "unresolved",
"assignee_id": "<string>",
"resolution": "in_release",
"resolved_app_id": "<string>",
"resolved_release": "<string>",
"resolved_at": "<string>",
"ignore": {
"mode": "forever",
"count": 123,
"seen": 123,
"until": "<string>"
},
"regressed_release": "<string>",
"regressed_at": "<string>",
"regressions": 123,
"updated_via": "console",
"updated_at": "<string>"
}
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Authorizations
A project token (apsio_pt_v0...), which reads exactly one project, or an OAuth access token issued for the API, which reads what its user can. Access tokens issued for Apsio's MCP server are accepted only from the MCP server itself.
Path Parameters
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"0192f3a4-0000-7000-8000-00000000a101"
The issue fingerprint.
^[A-Za-z0-9._:-]{1,128}$Body
unresolved, resolved, ignored With status resolved: in a release of one app (app_id, release), or in the next release.
in_release, next_release ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$1 - 128With status ignored: forever, until count more, or until a time.
Show child attributes
Show child attributes
A member of the organization, or null to unassign.
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Response
The new state.
Show child attributes
Show child attributes