Create a budget plan
curl --request POST \
--url https://api.finta.io/v2/budget-plans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"accountIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"isDefault": true
}
'import requests
url = "https://api.finta.io/v2/budget-plans"
payload = {
"name": "<string>",
"accountIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"isDefault": True
}
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({
name: '<string>',
accountIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
isDefault: true
})
};
fetch('https://api.finta.io/v2/budget-plans', 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.finta.io/v2/budget-plans",
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([
'name' => '<string>',
'accountIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'isDefault' => true
]),
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.finta.io/v2/budget-plans"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\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.finta.io/v2/budget-plans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finta.io/v2/budget-plans")
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 \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"method": "standard",
"accountScope": "All",
"isDefault": true,
"accountIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"budgetCount": 123
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": "Missing or invalid Authorization header"
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Per-minute rate limit exceeded (standard plan)"
}
}Budgets
Create a budget plan
Create a named plan. Pass accountIds to limit it to those accounts, or omit them to cover every account. A key with account restrictions can only select accounts it may use, and must pass accountIds. Names are unique per user. The plan is not the default unless isDefault is true or it is the first plan.
POST
/
budget-plans
Create a budget plan
curl --request POST \
--url https://api.finta.io/v2/budget-plans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"accountIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"isDefault": true
}
'import requests
url = "https://api.finta.io/v2/budget-plans"
payload = {
"name": "<string>",
"accountIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"isDefault": True
}
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({
name: '<string>',
accountIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
isDefault: true
})
};
fetch('https://api.finta.io/v2/budget-plans', 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.finta.io/v2/budget-plans",
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([
'name' => '<string>',
'accountIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'isDefault' => true
]),
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.finta.io/v2/budget-plans"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\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.finta.io/v2/budget-plans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finta.io/v2/budget-plans")
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 \"name\": \"<string>\",\n \"accountIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"isDefault\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"method": "standard",
"accountScope": "All",
"isDefault": true,
"accountIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"budgetCount": 123
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": "Missing or invalid Authorization header"
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": {
"code": "STORAGE_MODE_REQUIRED",
"message": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Per-minute rate limit exceeded (standard plan)"
}
}Authorizations
A Finta API key from API settings, or an OAuth access token issued to an authorized app. Send either as Authorization: Bearer <token>.
Body
application/json
Response
Created plan
Available options:
standard, envelope Available options:
All, Selected The plan's accounts when accountScope is Selected, otherwise empty