curl --request PATCH \
--url https://api.aisa.one/apis/v1/ads/accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"adAccountId": "act_123456789"
}
'import requests
url = "https://api.aisa.one/apis/v1/ads/accounts"
payload = { "adAccountId": "act_123456789" }
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({adAccountId: 'act_123456789'})
};
fetch('https://api.aisa.one/apis/v1/ads/accounts', 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.aisa.one/apis/v1/ads/accounts",
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([
'adAccountId' => 'act_123456789'
]),
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.aisa.one/apis/v1/ads/accounts"
payload := strings.NewReader("{\n \"adAccountId\": \"act_123456789\"\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.aisa.one/apis/v1/ads/accounts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"adAccountId\": \"act_123456789\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/ads/accounts")
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 \"adAccountId\": \"act_123456789\"\n}"
response = http.request(request)
puts response.read_body{
"adAccountId": "<string>",
"dsaDefaults": {
"beneficiary": "<string>",
"payor": "<string>"
},
"settings": {
"amountSpent": 123,
"balance": 123,
"currency": "<string>",
"fundingSource": {
"displayString": "<string>",
"type": 123
},
"name": "<string>",
"spendCap": 123
},
"urlTracking": {
"finalUrlSuffix": "<string>",
"trackingUrlTemplate": "<string>"
}
}{
"error": {
"code": "<string>",
"details": {},
"message": "<string>",
"param": "<string>",
"retryHint": "<string>",
"retryable": true,
"type": "<string>"
}
}Update ad account settings
curl --request PATCH \
--url https://api.aisa.one/apis/v1/ads/accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"adAccountId": "act_123456789"
}
'import requests
url = "https://api.aisa.one/apis/v1/ads/accounts"
payload = { "adAccountId": "act_123456789" }
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({adAccountId: 'act_123456789'})
};
fetch('https://api.aisa.one/apis/v1/ads/accounts', 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.aisa.one/apis/v1/ads/accounts",
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([
'adAccountId' => 'act_123456789'
]),
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.aisa.one/apis/v1/ads/accounts"
payload := strings.NewReader("{\n \"adAccountId\": \"act_123456789\"\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.aisa.one/apis/v1/ads/accounts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"adAccountId\": \"act_123456789\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/ads/accounts")
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 \"adAccountId\": \"act_123456789\"\n}"
response = http.request(request)
puts response.read_body{
"adAccountId": "<string>",
"dsaDefaults": {
"beneficiary": "<string>",
"payor": "<string>"
},
"settings": {
"amountSpent": 123,
"balance": 123,
"currency": "<string>",
"fundingSource": {
"displayString": "<string>",
"type": 123
},
"name": "<string>",
"spendCap": 123
},
"urlTracking": {
"finalUrlSuffix": "<string>",
"trackingUrlTemplate": "<string>"
}
}{
"error": {
"code": "<string>",
"details": {},
"message": "<string>",
"param": "<string>",
"retryHint": "<string>",
"retryable": true,
"type": "<string>"
}
}Request contract
- Method and path: PATCH /apis/v1/ads/accounts
- Availability: enabled
- Request URL template:
https://api.aisa.one/apis/v1/ads/accounts - connectionId: query; required
- X-Aisa-Confirm: header; optional
- Runtime facts: fe60122939c67dc98a3a6ac6b97bd5c326b526105150c8959304dd2160d4dd09
{
"operationId": "patch_aisa_ads_apis_v1_ads_accounts",
"method": "PATCH",
"path": "/apis/v1/ads/accounts",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [
{
"description": "The ads connection (adc_...) the request runs on: one of yours, from GET /apis/v1/ads/connections. On a request with a JSON body it may be sent as a top-level body member instead.",
"in": "query",
"name": "connectionId",
"required": true,
"schema": {
"pattern": "^adc_[0-9A-Za-z]+$",
"type": "string"
}
},
{
"description": "Required with the value \"spend\" when the request can spend money or change spend. Without it the request is refused with 409 confirmation_required, which describes what would happen; nothing is sent to the ad platform.",
"in": "header",
"name": "X-Aisa-Confirm",
"required": false,
"schema": {
"enum": [
"spend"
],
"type": "string"
}
}
],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"example": {
"adAccountId": "act_123456789",
"connectionId": "adc_7f3k2m9q",
"spendCap": 500
},
"schema": {
"additionalProperties": true,
"properties": {
"adAccountId": {
"description": "Meta ad account ID (act_...)",
"type": "string"
},
"connectionId": {
"description": "The ads connection (adc_...), when not sent as the connectionId query parameter.",
"pattern": "^adc_[0-9A-Za-z]+$",
"type": "string"
},
"defaultDsaBeneficiary": {
"description": "Legal entity benefiting from ads on this ad account",
"maxLength": 100,
"type": "string"
},
"defaultDsaPayor": {
"description": "Legal entity paying for ads on this ad account. Defaults to defaultDsaBeneficiary when omitted. Requires defaultDsaBeneficiary.",
"maxLength": 100,
"type": "string"
},
"finalUrlSuffix": {
"description": "Google only. Account final URL suffix (customer.final_url_suffix); an empty string clears it.",
"type": "string"
},
"name": {
"description": "New ad account name.",
"maxLength": 255,
"type": "string"
},
"resetAmountSpent": {
"description": "Restart the amount counted against the cap from zero. Cannot be combined with spendCap null.",
"type": "boolean"
},
"spendCap": {
"description": "Account spend cap in whole currency units; null removes it.",
"type": [
"number",
"null"
]
},
"trackingUrlTemplate": {
"description": "Google only. Account tracking template (customer.tracking_url_template); an empty string clears it.",
"type": "string"
}
},
"required": [
"adAccountId"
],
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"description": "Ads operations are free. Ad spend is billed by the ad platform to the connected ad account, never by AIsa.",
"kind": "no_customer_charge"
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Required with the value "spend" when the request can spend money or change spend. Without it the request is refused with 409 confirmation_required, which describes what would happen; nothing is sent to the ad platform.
spend Query Parameters
The ads connection (adc_...) the request runs on: one of yours, from GET /apis/v1/ads/connections. On a request with a JSON body it may be sent as a top-level body member instead.
^adc_[0-9A-Za-z]+$Body
Meta ad account ID (act_...)
The ads connection (adc_...), when not sent as the connectionId query parameter.
^adc_[0-9A-Za-z]+$Legal entity benefiting from ads on this ad account
100Legal entity paying for ads on this ad account. Defaults to defaultDsaBeneficiary when omitted. Requires defaultDsaBeneficiary.
100Google only. Account final URL suffix (customer.final_url_suffix); an empty string clears it.
New ad account name.
255Restart the amount counted against the cap from zero. Cannot be combined with spendCap null.
Account spend cap in whole currency units; null removes it.
Google only. Account tracking template (customer.tracking_url_template); an empty string clears it.
Response
Settings updated (each block re-read from Meta after the write)