curl --request POST \
--url https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--data @- <<EOF
{
"answers": [
{
"question_key": "source_of_wealth",
"prompt": "Please explain how the funds were accumulated.",
"answer_text": "Proceeds from the 2024 sale of the founder's previous company.",
"document_ids": [
"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
]
}
]
}
EOFconst options = {
method: 'POST',
headers: {'X-Application-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
answers: [
{
question_key: 'source_of_wealth',
prompt: 'Please explain how the funds were accumulated.',
answer_text: 'Proceeds from the 2024 sale of the founder\'s previous company.',
document_ids: ['1NFHrqBHb3cTfLVkFSGmHZqdDPi']
}
]
})
};
fetch('https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit"
payload = { "answers": [
{
"question_key": "source_of_wealth",
"prompt": "Please explain how the funds were accumulated.",
"answer_text": "Proceeds from the 2024 sale of the founder's previous company.",
"document_ids": ["1NFHrqBHb3cTfLVkFSGmHZqdDPi"]
}
] }
headers = {
"X-Application-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit"
payload := strings.NewReader("{\n \"answers\": [\n {\n \"question_key\": \"source_of_wealth\",\n \"prompt\": \"Please explain how the funds were accumulated.\",\n \"answer_text\": \"Proceeds from the 2024 sale of the founder's previous company.\",\n \"document_ids\": [\n \"1NFHrqBHb3cTfLVkFSGmHZqdDPi\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Application-Token", "<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))
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid Request",
"status": 400,
"detail": "Missing required X-Idempotency-Key header",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Authentication Required",
"status": 401,
"detail": "Missing X-Application-Token header",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Invalid request or expired token",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"code": "application_not_found",
"message": "Application not found"
}{
"code": "invalid_request",
"message": "The application has already been decided; the resubmission window is closed"
}Answer a request for information
Records the applicant’s response to a request for information and hands
the application back to the reviewer: rfi_status becomes
information_received and customer.rfi.responded is raised.
Call it after uploading whatever the reviewer asked for. The uploads
are already attached to the application, so a request for documents
alone needs no body beyond {}. answers carries the reviewer’s
free-text questions; document_ids inside an entry ties uploaded
documents to that particular answer.
It answers the reviewer’s request only, so unlike submitting the application again it does not require the rest of the application to be complete. It does not verify that a request is outstanding: on an application with no open request it still moves the status and raises the event.
Authentication: Application Token (X-Application-Token header). The
token is the token query parameter of the customer’s resubmit_url,
which GET /customers/{customer_id} returns while a request with a
resubmission scope is open. A request sent without one has no
resubmit_url; take the token from application_url instead.
curl --request POST \
--url https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--data @- <<EOF
{
"answers": [
{
"question_key": "source_of_wealth",
"prompt": "Please explain how the funds were accumulated.",
"answer_text": "Proceeds from the 2024 sale of the founder's previous company.",
"document_ids": [
"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
]
}
]
}
EOFconst options = {
method: 'POST',
headers: {'X-Application-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
answers: [
{
question_key: 'source_of_wealth',
prompt: 'Please explain how the funds were accumulated.',
answer_text: 'Proceeds from the 2024 sale of the founder\'s previous company.',
document_ids: ['1NFHrqBHb3cTfLVkFSGmHZqdDPi']
}
]
})
};
fetch('https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit"
payload = { "answers": [
{
"question_key": "source_of_wealth",
"prompt": "Please explain how the funds were accumulated.",
"answer_text": "Proceeds from the 2024 sale of the founder's previous company.",
"document_ids": ["1NFHrqBHb3cTfLVkFSGmHZqdDPi"]
}
] }
headers = {
"X-Application-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/applications/{id}/rfi/resubmit"
payload := strings.NewReader("{\n \"answers\": [\n {\n \"question_key\": \"source_of_wealth\",\n \"prompt\": \"Please explain how the funds were accumulated.\",\n \"answer_text\": \"Proceeds from the 2024 sale of the founder's previous company.\",\n \"document_ids\": [\n \"1NFHrqBHb3cTfLVkFSGmHZqdDPi\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Application-Token", "<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))
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid Request",
"status": 400,
"detail": "Missing required X-Idempotency-Key header",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Authentication Required",
"status": 401,
"detail": "Missing X-Application-Token header",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Invalid request or expired token",
"instance": "/applications/31TgwCp3sMdF9gY4nT6hKvXqRbLm/rfi/resubmit",
"request_id": "req_7f3a8b2c"
}{
"code": "application_not_found",
"message": "Application not found"
}{
"code": "invalid_request",
"message": "The application has already been decided; the resubmission window is closed"
}Authorizations
Application-specific token for public URL access. Generated when a customer is created. Provides access to a single application without requiring an API key. Token is valid for 90 days and rate-limited to 250 requests per hour.
Headers
Unique key, a UUID. The server rejects this call with 400 when the header is absent or is not a UUID, so send one on every request. A repeat of the same key within the cache window returns the original response instead of recording the answers again.
Path Parameters
Body
Applicant answers to the freeform RFI questions asked on this application.
Show child attributes
Show child attributes
Response
The response was recorded and the application is back with the reviewer.
Each call records the answers it carries, so a second call with a
NEW x-idempotency-key leaves the reviewer reading the same answer
twice. The status change and customer.rfi.responded are raised
once either way.
Retry with the SAME x-idempotency-key as the call you are
retrying: within the cache window the original response is replayed
and nothing is recorded again, which is what makes a retry safe
when you cannot tell whether the first attempt arrived.
Was this page helpful?

