curl --request POST \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"nameOptions": [
{
"name": "Acme Labs",
"entityTypeEnding": "LLC",
"position": 1
}
]
}
'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution"
payload = {
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"nameOptions": [
{
"name": "Acme Labs",
"entityTypeEnding": "LLC",
"position": 1
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
actionCode: 'FORMATION_NAME_OPTIONS_EXHAUSTED',
nameOptions: [{name: 'Acme Labs', entityTypeEnding: 'LLC', position: 1}]
})
};
fetch('https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution', 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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution",
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([
'actionCode' => 'FORMATION_NAME_OPTIONS_EXHAUSTED',
'nameOptions' => [
[
'name' => 'Acme Labs',
'entityTypeEnding' => 'LLC',
'position' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution"
payload := strings.NewReader("{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"requiredActionId": "31pLdpvMh4OfO90moxLgLT8AuQr",
"doolaCompanyId": "31pLD0Tq2lm2FsgRBoHv4x3BpzZ",
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"actionName": "New company names needed",
"status": "delivered",
"reason": "All submitted company name options were rejected by the state. Submit new options.",
"open": true,
"updatedAt": "2023-11-07T05:31:56Z",
"history": [
{
"status": "delivered",
"submittedPayload": {
"empty": true,
"array": true,
"null": true,
"object": true,
"float": true,
"container": true,
"textual": true,
"missingNode": true,
"nodeType": "ARRAY",
"string": true,
"integralNumber": true,
"valueNode": true,
"pojo": true,
"number": true,
"floatingPointNumber": true,
"short": true,
"int": true,
"long": true,
"double": true,
"bigDecimal": true,
"bigInteger": true,
"boolean": true,
"binary": true,
"embeddedValue": true
},
"createdAt": "2023-11-07T05:31:56Z"
}
]
}Resolve a required action
Submit what doola asked for. The action moves to submitted and doola takes it from there; you will receive further webhooks if anything else is needed. Actions resolved by another flow, such as an SS4 re-signature, are not accepted here.
curl --request POST \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"nameOptions": [
{
"name": "Acme Labs",
"entityTypeEnding": "LLC",
"position": 1
}
]
}
'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution"
payload = {
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"nameOptions": [
{
"name": "Acme Labs",
"entityTypeEnding": "LLC",
"position": 1
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
actionCode: 'FORMATION_NAME_OPTIONS_EXHAUSTED',
nameOptions: [{name: 'Acme Labs', entityTypeEnding: 'LLC', position: 1}]
})
};
fetch('https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution', 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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution",
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([
'actionCode' => 'FORMATION_NAME_OPTIONS_EXHAUSTED',
'nameOptions' => [
[
'name' => 'Acme Labs',
'entityTypeEnding' => 'LLC',
'position' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution"
payload := strings.NewReader("{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/required-actions/{requiredActionId}/resolution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"actionCode\": \"FORMATION_NAME_OPTIONS_EXHAUSTED\",\n \"nameOptions\": [\n {\n \"name\": \"Acme Labs\",\n \"entityTypeEnding\": \"LLC\",\n \"position\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"requiredActionId": "31pLdpvMh4OfO90moxLgLT8AuQr",
"doolaCompanyId": "31pLD0Tq2lm2FsgRBoHv4x3BpzZ",
"actionCode": "FORMATION_NAME_OPTIONS_EXHAUSTED",
"actionName": "New company names needed",
"status": "delivered",
"reason": "All submitted company name options were rejected by the state. Submit new options.",
"open": true,
"updatedAt": "2023-11-07T05:31:56Z",
"history": [
{
"status": "delivered",
"submittedPayload": {
"empty": true,
"array": true,
"null": true,
"object": true,
"float": true,
"container": true,
"textual": true,
"missingNode": true,
"nodeType": "ARRAY",
"string": true,
"integralNumber": true,
"valueNode": true,
"pojo": true,
"number": true,
"floatingPointNumber": true,
"short": true,
"int": true,
"long": true,
"double": true,
"bigDecimal": true,
"bigInteger": true,
"boolean": true,
"binary": true,
"embeddedValue": true
},
"createdAt": "2023-11-07T05:31:56Z"
}
]
}Authorizations
Partner API key. Send the raw key as the Authorization header value — e.g. dk_test_… in sandbox or dk_live_… in production. Generate and rotate keys in the doola Partner Portal.
Path Parameters
doola company ID (KSUID).
Required action ID (KSUID).
Body
Resolution payload for a required action
The code of the required action being resolved
FORMATION_NAME_OPTIONS_EXHAUSTED "FORMATION_NAME_OPTIONS_EXHAUSTED"
Replacement company names, in preference order, one to three entries. Required when actionCode is FORMATION_NAME_OPTIONS_EXHAUSTED.
Show child attributes
Show child attributes
Response
OK
An action doola needs you to take on a company
"31pLdpvMh4OfO90moxLgLT8AuQr"
"31pLD0Tq2lm2FsgRBoHv4x3BpzZ"
What is needed
FORMATION_NAME_OPTIONS_EXHAUSTED, FORMATION_SIGNATURE_SS4_RESET, FORMATION_SIGNATURE_FORM8821_REQUIRED "FORMATION_NAME_OPTIONS_EXHAUSTED"
Human-readable label for the action
"New company names needed"
created, delivered, delivery_failed, submitted, rejected, resolved "delivered"
Human-readable explanation you can surface to your user
"All submitted company name options were rejected by the state. Submit new options."
When this action last changed
Show child attributes
Show child attributes