Upload a customer supporting document
Attaches a supporting document to a customer and starts its transfer into Resolve's document validation service. Use this to hand Resolve buyer data you already hold — bank statements, financial statements, credit references, or payment history — so it can be used in a credit decision.
Create the customer first; this endpoint is separate from customer creation and belongs to the Partners API. MCP clients use partner_create_customer_document with the returned customer ID as merchant_customer_id. In ChatGPT, attach the file as download_url and supply filename and filetype separately. See the <a href="/guides/mcp-tools-partner">Partner MCP tool reference</a>.
The transfer mode is determined by the request shape:
- Omit download_url and Resolve returns a presigned S3 upload_url (transfer_method=presigned_upload). PUT the document bytes to that URL with the headers in upload_headers before upload_expires_at.
- Supply download_url and Resolve queues a background download job (transfer_method=download_url). There is nothing to upload.
Documents are validated asynchronously, so a successful response means the document was accepted for transfer, not that it passed validation. Poll <a href="#operation/fetchCustomer">#fetchCustomer</a> for the resulting credit_status and limit changes.
Fulfilling a banking-data request. When a credit decision is waiting on bank statements, pass the open request's ID as additional_data_request_id alongside a bank_statements upload. Resolve fulfills that request once the document validates. The field is only accepted with document_type bank_statements, and is rejected with 422 if it does not identify a banking-data request on this customer that is still awaiting a response.
Validation notes:
- bank_statements must be PDFs; other document types also accept PNG, JPEG, CSV, XLS, and XLSX
- filename must include an extension matching filetype
- download_url, when provided, must use http or https, carry no embedded credentials, and resolve to a public host
For remote downloads, queue dispatch runs after the document row is committed. A dispatch failure at that point does not roll the document back — the response is still successful and queue_dispatch_status comes back as failed.
Request
- Base URLhttps://app-sandbox.resolvepay.com/api
- Auth
- HTTP bearer
- or HTTP basic
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
ID of the customer the supporting document belongs to
Request body
Example request
{
"document_type": "bank_statements",
"additional_data_request_id": "adr_1234567890abcdef",
"filename": "bank_statement_2026_01.pdf",
"filetype": "application/pdf"
}Response
Upload instructions for the customer document. The shape depends on the transfer mode requested.
Example response
{
"id": "mcd_1234567890abcdef",
"document_id": "mcd_1234567890abcdef",
"document_type": "bank_statements",
"upload_url": "https://resolve-document-validation-uploads.s3.amazonaws.com/merchant_customer/cus_123/document/mcd_123/bank_statement_2026_01.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"upload_expires_at": "2026-02-26T18:35:00.000Z",
"object_key": "merchant_customer/cus_1234567890abcdef/document/mcd_1234567890abcdef/bank_statement_2026_01.pdf",
"transfer_method": "presigned_upload",
"upload_headers": {
"x-amz-meta-validation_profile": "merchant_underwriting_document_default"
},
"validation_profile": "merchant_underwriting_document_default"
}Changes
No recorded changes to this operation across all 1 revision of this API.