Create organization
Creates a new organization under the authenticated admin user’s client application. The response body is the newly created organization, equivalent to calling GET /organizations/{organizationId} with the same include parameters. Returns 400 when required fields (name) is missing or invalid. Returns 404 when templateOrganizationId references an organization that does not exist.
curl --request POST \
--url https://stage-api.findity.com/api/v1/admin/organizations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme Corp",
"externalSourceId": "ext-acme-001",
"vat": "123456-1234",
"countryCode": "SE"
}
'import requests
url = "https://stage-api.findity.com/api/v1/admin/organizations"
payload = {
"name": "Acme Corp",
"externalSourceId": "ext-acme-001",
"vat": "123456-1234",
"countryCode": "SE"
}
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: 'Acme Corp',
externalSourceId: 'ext-acme-001',
vat: '123456-1234',
countryCode: 'SE'
})
};
fetch('https://stage-api.findity.com/api/v1/admin/organizations', 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://stage-api.findity.com/api/v1/admin/organizations",
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' => 'Acme Corp',
'externalSourceId' => 'ext-acme-001',
'vat' => '123456-1234',
'countryCode' => 'SE'
]),
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://stage-api.findity.com/api/v1/admin/organizations"
payload := strings.NewReader("{\n \"name\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\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://stage-api.findity.com/api/v1/admin/organizations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://stage-api.findity.com/api/v1/admin/organizations")
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\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\n}"
response = http.request(request)
puts response.read_body{
"id": "11adfe2a080040e3892ffb89c21ec44e",
"externalSourceId": "ext-acme-001",
"name": "Example Ltd.",
"vat": "123456-1234",
"phone": "+46701234567",
"status": "NORMAL",
"type": "COMPANY",
"dateCreated": "2024-01-15T09:30:00Z",
"lastUpdated": "2024-06-01T14:22:00Z",
"clientApplicationId": "ca1234567890abcdef1234567890abcd",
"personId": "8ab28c4f84d89c570184e1da2bf10540",
"reportReviewOnPartner": false,
"sendEventToExternalSystemPartnerLevel": false,
"sendEventToExternalSystem": false,
"automaticSetupEnabled": true,
"automaticSetupCompleted": false,
"supportAccessEndDate": null,
"policyUrl": null,
"address": {
"street1": "Storgatan 1",
"city": "Stockholm",
"postalCode": "11122",
"countryName": "Sweden",
"countryIso2Code": "SE"
},
"partner": {
"partnerId": "abc123def456abc123def456abc123de",
"partnerName": "Acme Partner AB",
"partnerCode": "ACME",
"payedByPartner": true
}
}{
"result": "error",
"code": "MISSING_REQUIRED_FIELD",
"description": "Required field 'name' is missing"
}{
"result": "error",
"code": "ORGANIZATION_NOT_FOUND",
"description": "Organization not found"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
String. Comma-separated list of optional data sections to include in the response. Accepted values: address, invoiceDetails, settings, design, partner.
"address,partner"
Body
Display name of the new organization. String with maximum length of 255 characters.
255"Acme Corp"
Caller-supplied identifier used to address this organization from an external system. Must be unique within the client application. Omit if not needed. String with maximum length of 255 characters.
255Organization registration number (VAT/company number). String with maximum length of 255 characters.
255Main phone number of the organization. String with maximum length of 255 characters.
255ISO 8601 timestamp until which Findity support staff has elevated access to this organization.
Whether events from this organization are sent to the external system.
ISO 3166-1 alpha-2 country code for the organization's home country. Defaults to the template organization's country when omitted.
"SE"
ISO 3166-1 alpha-2 country code used to configure accounting settings. Defaults to the template organization's value when omitted.
"SE"
Internal ID or externalSourceId of a template organization to use as a configuration baseline. When omitted the default template for the client application is used.
Response
Created
Unique internal identifier of the organization. 32-character hex string. Read-only; assigned by the server on creation.
^[0-9a-fA-F]{32}$Display name of the organization.
Lifecycle status of the organization.
NORMAL, NEW, INCOMPLETE ISO 8601 timestamp of when the organization was created.
ISO 8601 timestamp of when the organization was last modified.
Whether expense report review is delegated to partner level rather than handled within this organization.
Whether events are forwarded to the external system at partner level (rather than organization level).
Whether events from this organization are sent to the external system.
Caller-supplied identifier used to address this organization from an external system. Null when no external source ID has been set.
Organization registration number (VAT/company number).
Main phone number of the organization. Null when no phone number has been set.
What kind of organization this is. COMPANY is a real organization, TEMPLATE is a template organization usable as templateOrganizationId when creating one. Template organizations have no employees, partner or design, so design comes back empty and meta is left out for them.
COMPANY, TEMPLATE ID of the client application (partner integration) that created this organization.
ID of the person that administers this organization. When several persons are linked to the authenticated account, this is the specific person holding the administrator role for this organization, which is not necessarily the logged in person. Falls back to the logged in person when no separate person is found.
^[0-9a-fA-F]{32}$Whether the organization is set up automatically from its partner template. Always present, and null when the flag has never been set.
Whether the automatic setup has finished. Always present, and null when the flag has never been set; a client that drives onboarding treats enabled and not completed as setup still pending.
ISO 8601 timestamp until which Findity support staff has elevated access to this organization. Null when no support access window is active.
Pre-signed URL to the organization's active policy document. Null when no policy document is configured.
Postal address of the organization. Only present when include=address is requested. Null when the organization has no address on record.
Hide child attributes
Hide child attributes
Invoice address and billing contact. Only present when include=invoiceDetails is requested. Null when the organization has no invoice details on record.
Hide child attributes
Hide child attributes
First line of the invoice street address.
City name.
Postal or ZIP code.
Full country name.
ISO 3166-1 alpha-2 country code (2-letter uppercase, e.g. SE).
Email address for invoice delivery.
Organization-specific configuration settings. Only present when include=settings is requested. Empty object when the organization has no custom settings configured.
Branding and visual design configuration for this organization, resolved by merging client application, partner and organization level design. Only present when include=design is requested. Empty object when the organization has no custom design configured.
Hide child attributes
Hide child attributes
Hex color code, either three or six digits (e.g. #1A73E8).
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$Hex color code, either three or six digits (e.g. #0B4FA8).
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$Hex color code, either three or six digits. Defaults to accentColor when not configured.
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$Hex color code, either three or six digits. Defaults to darkAccentColor when not configured.
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$Six digit hex color code, always #FFFFFF or #000000. Derived from accentColor for readable text on that background.
^#[0-9A-Fa-f]{6}$Six digit hex color code, always #FFFFFF or #000000. Derived from darkAccentColor for readable text on that background.
^#[0-9A-Fa-f]{6}$Six digit hex color code, always #FFFFFF or #000000. Derived from secondaryAccentColor for readable text on that background.
^#[0-9A-Fa-f]{6}$Six digit hex color code, always #FFFFFF or #000000. Derived from secondaryDarkAccentColor for readable text on that background.
^#[0-9A-Fa-f]{6}$URL to the organization logo.
URL to the logo used in the menu.
URL to the organization icon.
Partner affiliation details. Only present when include=partner is requested. Null when the organization has no partner association.
Hide child attributes
Hide child attributes
Additional computed data about the organization. Only present on GET /organizations when include=meta.permissions is requested. This is per-organization metadata and is unrelated to the list level meta object that carries count and total. The name follows the include=meta.* convention used across the Findity APIs, and matches the same field on GET /v1/expense/me/organizations. Left out for template organizations, which cannot have an employee and therefore no permissions to report.
Hide child attributes
Hide child attributes
What the authenticated user is allowed to do in this organization. Null when permissions cannot be resolved for the organization.
Hide child attributes
Hide child attributes
If user can connect new credit cards.
If user can view expenses, i.e. is an employee of an organization.
If user can approve expenses in the organization.
If user can create expenses.
If user can create expense reports.
If user can send in single expenses.
If user can send expense reports.
If user is allowed to delete the account.
If user has administration rights for the organization, allowing them to manage organization settings, members, and related configuration.
curl --request POST \
--url https://stage-api.findity.com/api/v1/admin/organizations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme Corp",
"externalSourceId": "ext-acme-001",
"vat": "123456-1234",
"countryCode": "SE"
}
'import requests
url = "https://stage-api.findity.com/api/v1/admin/organizations"
payload = {
"name": "Acme Corp",
"externalSourceId": "ext-acme-001",
"vat": "123456-1234",
"countryCode": "SE"
}
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: 'Acme Corp',
externalSourceId: 'ext-acme-001',
vat: '123456-1234',
countryCode: 'SE'
})
};
fetch('https://stage-api.findity.com/api/v1/admin/organizations', 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://stage-api.findity.com/api/v1/admin/organizations",
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' => 'Acme Corp',
'externalSourceId' => 'ext-acme-001',
'vat' => '123456-1234',
'countryCode' => 'SE'
]),
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://stage-api.findity.com/api/v1/admin/organizations"
payload := strings.NewReader("{\n \"name\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\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://stage-api.findity.com/api/v1/admin/organizations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://stage-api.findity.com/api/v1/admin/organizations")
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\": \"Acme Corp\",\n \"externalSourceId\": \"ext-acme-001\",\n \"vat\": \"123456-1234\",\n \"countryCode\": \"SE\"\n}"
response = http.request(request)
puts response.read_body{
"id": "11adfe2a080040e3892ffb89c21ec44e",
"externalSourceId": "ext-acme-001",
"name": "Example Ltd.",
"vat": "123456-1234",
"phone": "+46701234567",
"status": "NORMAL",
"type": "COMPANY",
"dateCreated": "2024-01-15T09:30:00Z",
"lastUpdated": "2024-06-01T14:22:00Z",
"clientApplicationId": "ca1234567890abcdef1234567890abcd",
"personId": "8ab28c4f84d89c570184e1da2bf10540",
"reportReviewOnPartner": false,
"sendEventToExternalSystemPartnerLevel": false,
"sendEventToExternalSystem": false,
"automaticSetupEnabled": true,
"automaticSetupCompleted": false,
"supportAccessEndDate": null,
"policyUrl": null,
"address": {
"street1": "Storgatan 1",
"city": "Stockholm",
"postalCode": "11122",
"countryName": "Sweden",
"countryIso2Code": "SE"
},
"partner": {
"partnerId": "abc123def456abc123def456abc123de",
"partnerName": "Acme Partner AB",
"partnerCode": "ACME",
"payedByPartner": true
}
}{
"result": "error",
"code": "MISSING_REQUIRED_FIELD",
"description": "Required field 'name' is missing"
}{
"result": "error",
"code": "ORGANIZATION_NOT_FOUND",
"description": "Organization not found"
}
