Change the state or assignee of several issues
curl --request POST \
--url https://api.apsio.io/v1/projects/{projectId}/issues/state \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"issue_ids": [
"<string>"
],
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/state"
payload = {
"issue_ids": ["<string>"],
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
issue_ids: ['<string>'],
app_id: '<string>',
release: '<string>',
assignee_id: '<string>'
})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/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/state",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'issue_ids' => [
'<string>'
],
'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/state"
payload := strings.NewReader("{\n \"issue_ids\": [\n \"<string>\"\n ],\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.apsio.io/v1/projects/{projectId}/issues/state")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"issue_ids\": [\n \"<string>\"\n ],\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/state")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"issue_ids\": [\n \"<string>\"\n ],\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>"
}
}API reference
Change the state or assignee of several issues
The same change for up to 100 issues at once, audited per issue. Send Content-Type: application/json.
POST
/
projects
/
{projectId}
/
issues
/
state
Change the state or assignee of several issues
curl --request POST \
--url https://api.apsio.io/v1/projects/{projectId}/issues/state \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"issue_ids": [
"<string>"
],
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/state"
payload = {
"issue_ids": ["<string>"],
"app_id": "<string>",
"release": "<string>",
"assignee_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
issue_ids: ['<string>'],
app_id: '<string>',
release: '<string>',
assignee_id: '<string>'
})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/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/state",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'issue_ids' => [
'<string>'
],
'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/state"
payload := strings.NewReader("{\n \"issue_ids\": [\n \"<string>\"\n ],\n \"app_id\": \"<string>\",\n \"release\": \"<string>\",\n \"assignee_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.apsio.io/v1/projects/{projectId}/issues/state")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"issue_ids\": [\n \"<string>\"\n ],\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/state")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"issue_ids\": [\n \"<string>\"\n ],\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
bearersession
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
Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Example:
"0192f3a4-0000-7000-8000-00000000a101"
Body
application/json
Required array length:
1 - 100 elementsPattern:
^[A-Za-z0-9._:-]{1,128}$Available options:
unresolved, resolved, ignored With status resolved: in a release of one app (app_id, release), or in the next release.
Available options:
in_release, next_release Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Required string length:
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.
Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Response
The new states.
Show child attributes
Show child attributes