App Instance API
Update App Instance
Update an existing app instance.
PUT
/
v2
/
app-instances
/
{id}
Update App Instance
curl --request PUT \
--url https://public.api.serval.com/v2/app-instances/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalServiceInstanceId": "<string>",
"name": "<string>",
"defaultAccessPolicyId": "<string>",
"accessRequestsEnabled": true,
"owners": {
"userIds": [
"<string>"
],
"groupIds": [
"<string>"
]
}
}
'import requests
url = "https://public.api.serval.com/v2/app-instances/{id}"
payload = {
"externalServiceInstanceId": "<string>",
"name": "<string>",
"defaultAccessPolicyId": "<string>",
"accessRequestsEnabled": True,
"owners": {
"userIds": ["<string>"],
"groupIds": ["<string>"]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalServiceInstanceId: '<string>',
name: '<string>',
defaultAccessPolicyId: '<string>',
accessRequestsEnabled: true,
owners: {userIds: ['<string>'], groupIds: ['<string>']}
})
};
fetch('https://public.api.serval.com/v2/app-instances/{id}', 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://public.api.serval.com/v2/app-instances/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'externalServiceInstanceId' => '<string>',
'name' => '<string>',
'defaultAccessPolicyId' => '<string>',
'accessRequestsEnabled' => true,
'owners' => [
'userIds' => [
'<string>'
],
'groupIds' => [
'<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://public.api.serval.com/v2/app-instances/{id}"
payload := strings.NewReader("{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://public.api.serval.com/v2/app-instances/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.api.serval.com/v2/app-instances/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"customServiceId": "<string>",
"id": "<string>",
"teamId": "<string>",
"externalServiceInstanceId": "<string>",
"name": "<string>",
"accessRequestsEnabled": true,
"defaultAccessPolicyId": "<string>",
"customServiceName": "<string>",
"tagIds": [
"<string>"
],
"integrationIds": [
"<string>"
],
"a2aAgentCard": {
"name": "<string>",
"description": "<string>",
"url": "<string>",
"version": "<string>",
"skills": [
{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"examples": [
"<string>"
],
"inputModes": [
"<string>"
],
"outputModes": [
"<string>"
]
}
],
"workflowId": "<string>",
"lastSyncedAt": "2025-01-15T01:30:15.000Z",
"securitySchemes": [
{
"name": "<string>",
"kind": "A2A_AGENT_SECURITY_SCHEME_KIND_UNSPECIFIED",
"openIdConnectUrl": "<string>",
"flow": "<string>",
"oauth2MetadataUrl": "<string>",
"scopes": [
"<string>"
]
}
]
},
"routeDirectFromWorker": true,
"owners": {
"userIds": [
"<string>"
],
"groupIds": [
"<string>"
]
}
}
}Authentication and permissions
Token requirements: User-based token (OAuth) or Organization-scoped API key or Team-scoped API key. Send a bearer access token for one of these identities. The permissions and resource restrictions below also apply.
| Credential | Access requirements |
|---|---|
| Organization-scoped API key | apps:write |
| Team-scoped API key | apps:write |
| User-based token (OAuth) | Supported, subject to permissions |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the app instance.
Body
application/json
The external service instance ID (e.g., GitHub org name, Okta domain, AWS account ID).
The name of the app instance.
The default access policy for the app instance. Unset leaves the current policy unchanged. Must not be empty when set — an instance always has a default policy.
Whether access requests are enabled for the app instance. Unset leaves the current setting unchanged.
Omit to leave owners unchanged. When present, replaces all owners; {} clears them.
Show child attributes
Show child attributes
Response
200 - application/json
Success
The updated app instance.
- data
- data
Show child attributes
Show child attributes
Was this page helpful?
⌘I
Update App Instance
curl --request PUT \
--url https://public.api.serval.com/v2/app-instances/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalServiceInstanceId": "<string>",
"name": "<string>",
"defaultAccessPolicyId": "<string>",
"accessRequestsEnabled": true,
"owners": {
"userIds": [
"<string>"
],
"groupIds": [
"<string>"
]
}
}
'import requests
url = "https://public.api.serval.com/v2/app-instances/{id}"
payload = {
"externalServiceInstanceId": "<string>",
"name": "<string>",
"defaultAccessPolicyId": "<string>",
"accessRequestsEnabled": True,
"owners": {
"userIds": ["<string>"],
"groupIds": ["<string>"]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalServiceInstanceId: '<string>',
name: '<string>',
defaultAccessPolicyId: '<string>',
accessRequestsEnabled: true,
owners: {userIds: ['<string>'], groupIds: ['<string>']}
})
};
fetch('https://public.api.serval.com/v2/app-instances/{id}', 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://public.api.serval.com/v2/app-instances/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'externalServiceInstanceId' => '<string>',
'name' => '<string>',
'defaultAccessPolicyId' => '<string>',
'accessRequestsEnabled' => true,
'owners' => [
'userIds' => [
'<string>'
],
'groupIds' => [
'<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://public.api.serval.com/v2/app-instances/{id}"
payload := strings.NewReader("{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://public.api.serval.com/v2/app-instances/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.api.serval.com/v2/app-instances/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalServiceInstanceId\": \"<string>\",\n \"name\": \"<string>\",\n \"defaultAccessPolicyId\": \"<string>\",\n \"accessRequestsEnabled\": true,\n \"owners\": {\n \"userIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"customServiceId": "<string>",
"id": "<string>",
"teamId": "<string>",
"externalServiceInstanceId": "<string>",
"name": "<string>",
"accessRequestsEnabled": true,
"defaultAccessPolicyId": "<string>",
"customServiceName": "<string>",
"tagIds": [
"<string>"
],
"integrationIds": [
"<string>"
],
"a2aAgentCard": {
"name": "<string>",
"description": "<string>",
"url": "<string>",
"version": "<string>",
"skills": [
{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"examples": [
"<string>"
],
"inputModes": [
"<string>"
],
"outputModes": [
"<string>"
]
}
],
"workflowId": "<string>",
"lastSyncedAt": "2025-01-15T01:30:15.000Z",
"securitySchemes": [
{
"name": "<string>",
"kind": "A2A_AGENT_SECURITY_SCHEME_KIND_UNSPECIFIED",
"openIdConnectUrl": "<string>",
"flow": "<string>",
"oauth2MetadataUrl": "<string>",
"scopes": [
"<string>"
]
}
]
},
"routeDirectFromWorker": true,
"owners": {
"userIds": [
"<string>"
],
"groupIds": [
"<string>"
]
}
}
}
