Skip to main content
POST
/
applications
/
{application_id}
/
associated-individuals
/
{individual_id}
/
documents
/
upload-url
Get presigned URL for individual document upload
curl --request POST \
  --url https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}/documents/upload-url \
  --header 'Content-Type: application/json' \
  --header 'X-Application-Token: <api-key>' \
  --header 'x-idempotency-key: <x-idempotency-key>' \
  --data '
{
  "document_type": "passport",
  "country": "US",
  "file_type": "pdf",
  "id_number": "AB1234567",
  "filename": "passport_front.jpg"
}
'
{
  "upload_url": "https://storage.googleapis.com/bucket/path?...",
  "upload_id": "2hCjxJzUAW6JVRkZqaF9E0KpM3a",
  "object_path": "applications/business/2hCjxJzUAW6JVRkZqaF9E0KpM3a/business-documents/2hDeFgHiJkLmNoPqRsTuVwXyZ",
  "expires_at": "2025-01-15T18:30:00Z"
}

Authorizations

X-Application-Token
string
header
required

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 30 days and rate-limited to 100 requests per hour.

Headers

x-idempotency-key
string<uuid>
required

Unique key to ensure request idempotency. If the same key is used within a certain time window, the original response will be returned instead of executing the request again.

Path Parameters

application_id
string
required

The unique identifier for the application KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.

Required string length: 27
Example:

"1NFHrqBHb3cTfLVkFSGmHZqdDPi"

individual_id
string
required

The unique identifier for the individual KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.

Required string length: 27
Example:

"1NFHrqBHb3cTfLVkFSGmHZqdDPi"

Body

application/json

Request to generate a presigned URL for uploading an individual document (identity or EDD). For identity documents (passport, drivers_license_front, drivers_license_back, residence_permit_front, residence_permit_back), id_number is required.

document_type
enum<string>
required

Type of document that can be uploaded for individuals (identity documents + EDD documents)

Available options:
passport,
drivers_license_front,
drivers_license_back,
residence_permit_front,
residence_permit_back,
proof_of_address,
bank_statement,
utility_bill,
source_of_wealth,
payslip,
employment_contract,
income_verification_letter,
savings_statement,
crypto_statement,
investment_statement
Example:

"passport"

country
string
required

ISO 3166-1 alpha-2 country code of the issuing country. Required for identity documents, not required for EDD documents.

Required string length: 2
Example:

"US"

file_type
enum<string>
required

Supported file type

Available options:
pdf,
jpeg,
png
Example:

"pdf"

id_number
string

REQUIRED for identity documents (passport, driver's license, residence permit). The ID number on the document (e.g., passport number, driver's license number). Not required for EDD documents like bank statements.

Example:

"AB1234567"

filename
string

Optional original filename. Will be sanitized for safe storage and display.

Maximum string length: 100
Example:

"passport_front.jpg"

Response

Presigned URL generated successfully

Response containing a presigned URL for document upload

upload_url
string<uri>
required

Presigned URL to upload the document to. Use PUT method with the file content.

Example:

"https://storage.googleapis.com/bucket/path?..."

upload_id
string
required

Unique identifier for this upload. Use this when calling the verify endpoint.

Example:

"2hCjxJzUAW6JVRkZqaF9E0KpM3a"

object_path
string
required

The GCS object path where the document will be stored. Pass this to the verify endpoint.

Example:

"applications/business/2hCjxJzUAW6JVRkZqaF9E0KpM3a/business-documents/2hDeFgHiJkLmNoPqRsTuVwXyZ"

expires_at
string<date-time>
required

ISO 8601 timestamp when the presigned URL expires

Example:

"2025-01-15T18:30:00Z"