Replace the source inventory
curl --request PUT \
--url https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"systems": [
{
"name": "<string>",
"provider_key": "<string>",
"description": "<string>"
}
],
"customer_id": "<string>"
}
'import requests
url = "https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources"
payload = {
"systems": [
{
"name": "<string>",
"provider_key": "<string>",
"description": "<string>"
}
],
"customer_id": "<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({
systems: [{name: '<string>', provider_key: '<string>', description: '<string>'}],
customer_id: '<string>'
})
};
fetch('https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources', 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.app.lastaccountingcompany.com/portal/onboarding/journey/sources",
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([
'systems' => [
[
'name' => '<string>',
'provider_key' => '<string>',
'description' => '<string>'
]
],
'customer_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.app.lastaccountingcompany.com/portal/onboarding/journey/sources"
payload := strings.NewReader("{\n \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\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://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources")
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 \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"customer_id": "<string>",
"checklist": {},
"answers": [
{
"question_key": "business_activity",
"answer": {
"text": "<string>"
},
"skipped": true,
"answered_at": "2023-11-07T05:31:56Z"
}
],
"sources": [
{
"kind": "banking",
"name": "<string>",
"id": "<string>",
"declared_at": "2023-11-07T05:31:56Z",
"provider_key": "<string>",
"description": "<string>"
}
],
"statements": [
{
"id": "<string>",
"kind": "balance_sheet",
"document_id": "<string>",
"uploaded_at": "2023-11-07T05:31:56Z"
}
],
"source_fingerprint": "<string>",
"sources_confirmed": true,
"journey_complete": true,
"resume_step": "<string>",
"platform_access": {
"released": true,
"action": "released",
"actor": "<string>",
"reason": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"customer_can_edit": true,
"existing_accounting": {
"value": true,
"system": "none",
"name": "<string>"
}
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Onboarding
Replace the source inventory
Reconciles the complete current source set. Accounting systems, payroll, and e-invoicing are separate answers and are not source kinds. Any change invalidates the prior source confirmation by fingerprint.
PUT
/
onboarding
/
journey
/
sources
Replace the source inventory
curl --request PUT \
--url https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"systems": [
{
"name": "<string>",
"provider_key": "<string>",
"description": "<string>"
}
],
"customer_id": "<string>"
}
'import requests
url = "https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources"
payload = {
"systems": [
{
"name": "<string>",
"provider_key": "<string>",
"description": "<string>"
}
],
"customer_id": "<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({
systems: [{name: '<string>', provider_key: '<string>', description: '<string>'}],
customer_id: '<string>'
})
};
fetch('https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources', 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.app.lastaccountingcompany.com/portal/onboarding/journey/sources",
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([
'systems' => [
[
'name' => '<string>',
'provider_key' => '<string>',
'description' => '<string>'
]
],
'customer_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.app.lastaccountingcompany.com/portal/onboarding/journey/sources"
payload := strings.NewReader("{\n \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\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://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/onboarding/journey/sources")
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 \"systems\": [\n {\n \"name\": \"<string>\",\n \"provider_key\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"customer_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"customer_id": "<string>",
"checklist": {},
"answers": [
{
"question_key": "business_activity",
"answer": {
"text": "<string>"
},
"skipped": true,
"answered_at": "2023-11-07T05:31:56Z"
}
],
"sources": [
{
"kind": "banking",
"name": "<string>",
"id": "<string>",
"declared_at": "2023-11-07T05:31:56Z",
"provider_key": "<string>",
"description": "<string>"
}
],
"statements": [
{
"id": "<string>",
"kind": "balance_sheet",
"document_id": "<string>",
"uploaded_at": "2023-11-07T05:31:56Z"
}
],
"source_fingerprint": "<string>",
"sources_confirmed": true,
"journey_complete": true,
"resume_step": "<string>",
"platform_access": {
"released": true,
"action": "released",
"actor": "<string>",
"reason": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"customer_can_edit": true,
"existing_accounting": {
"value": true,
"system": "none",
"name": "<string>"
}
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Authorizations
Portal API key minted in portal Settings → API access. Scope read or write; pinned to one company. Send as Authorization: Bearer lac_sk_....
Body
application/json
Response
Updated journey.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes