curl --request POST \
--url https://platform.spritz.finance/v1/deposits/direct \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"preparationId": "prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X"
}
'import requests
url = "https://platform.spritz.finance/v1/deposits/direct"
payload = { "preparationId": "prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X" }
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({preparationId: 'prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X'})
};
fetch('https://platform.spritz.finance/v1/deposits/direct', 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://platform.spritz.finance/v1/deposits/direct",
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([
'preparationId' => 'prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-key>"
],
]);
$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://platform.spritz.finance/v1/deposits/direct"
payload := strings.NewReader("{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
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://platform.spritz.finance/v1/deposits/direct")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.spritz.finance/v1/deposits/direct")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}"
response = http.request(request)
puts response.read_body{
"id": "dep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X",
"sourceId": "fs_01JV7Q8M4Y8K6N2Z5P3R1T9W0X",
"onRampId": "onramp_xyz789",
"status": "authorized",
"quoteType": "exact_input",
"requestedPriority": "normal",
"priority": "normal",
"feeRateBps": 123,
"principalAmountUsd": "<string>",
"instantPortionUsd": "<string>",
"settlementPortionUsd": "<string>",
"expectedAssetAmount": "<string>",
"grossFeeUsd": "<string>",
"publishedFeeUsd": "<string>",
"regularPublishedFeeUsd": "<string>",
"instantPublishedFeeUsd": "<string>",
"feeSubsidyUsd": "<string>",
"userFeeUsd": "<string>",
"totalDebitAmountUsd": "<string>",
"feeSubsidy": {
"percentage": 123,
"percentageBps": 123,
"maxAmountUsd": "<string>",
"appliedAmountUsd": "<string>"
},
"network": "solana",
"asset": "USDC",
"assetAddress": "<string>",
"address": "<string>",
"debitStatus": "authorized",
"releaseStatus": "not_started",
"releaseDecisionMode": "after_settlement",
"releasedAmountUsd": "<string>",
"confirmedReleasedAmountUsd": "<string>",
"authorizedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"settledAt": "2023-11-07T05:31:56Z",
"returnedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"returnCode": "<string>",
"returnReason": "<string>",
"debitFailureCode": "<string>",
"debitFailureReason": "<string>",
"releaseFailureCode": "<string>",
"releaseFailureReason": "<string>",
"payoutTxHash": "<string>"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true,
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}{
"title": "Unauthorized",
"status": 401,
"type": "urn:problem-type:auth:unauthorized",
"detail": "Bearer token required",
"instance": "<string>",
"realm": "API",
"scope": "read:users"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "<string>",
"status": 404,
"resourceType": "user",
"resourceId": "<string>",
"type": "about:blank",
"detail": "<string>",
"instance": "<string>"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}Create a direct deposit
Authorizes and creates a deposit against a raw wallet address prepared via /direct/prepare. Authorization is derived from the verified ACH funding source; no wallet signature is required. Idempotency-Key is required; reuse the same key and body after a timeout to recover the original response without creating another deposit.
curl --request POST \
--url https://platform.spritz.finance/v1/deposits/direct \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"preparationId": "prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X"
}
'import requests
url = "https://platform.spritz.finance/v1/deposits/direct"
payload = { "preparationId": "prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X" }
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({preparationId: 'prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X'})
};
fetch('https://platform.spritz.finance/v1/deposits/direct', 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://platform.spritz.finance/v1/deposits/direct",
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([
'preparationId' => 'prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-key>"
],
]);
$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://platform.spritz.finance/v1/deposits/direct"
payload := strings.NewReader("{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
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://platform.spritz.finance/v1/deposits/direct")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.spritz.finance/v1/deposits/direct")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"preparationId\": \"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X\"\n}"
response = http.request(request)
puts response.read_body{
"id": "dep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X",
"sourceId": "fs_01JV7Q8M4Y8K6N2Z5P3R1T9W0X",
"onRampId": "onramp_xyz789",
"status": "authorized",
"quoteType": "exact_input",
"requestedPriority": "normal",
"priority": "normal",
"feeRateBps": 123,
"principalAmountUsd": "<string>",
"instantPortionUsd": "<string>",
"settlementPortionUsd": "<string>",
"expectedAssetAmount": "<string>",
"grossFeeUsd": "<string>",
"publishedFeeUsd": "<string>",
"regularPublishedFeeUsd": "<string>",
"instantPublishedFeeUsd": "<string>",
"feeSubsidyUsd": "<string>",
"userFeeUsd": "<string>",
"totalDebitAmountUsd": "<string>",
"feeSubsidy": {
"percentage": 123,
"percentageBps": 123,
"maxAmountUsd": "<string>",
"appliedAmountUsd": "<string>"
},
"network": "solana",
"asset": "USDC",
"assetAddress": "<string>",
"address": "<string>",
"debitStatus": "authorized",
"releaseStatus": "not_started",
"releaseDecisionMode": "after_settlement",
"releasedAmountUsd": "<string>",
"confirmedReleasedAmountUsd": "<string>",
"authorizedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"settledAt": "2023-11-07T05:31:56Z",
"returnedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"returnCode": "<string>",
"returnReason": "<string>",
"debitFailureCode": "<string>",
"debitFailureReason": "<string>",
"releaseFailureCode": "<string>",
"releaseFailureReason": "<string>",
"payoutTxHash": "<string>"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true,
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}{
"title": "Unauthorized",
"status": 401,
"type": "urn:problem-type:auth:unauthorized",
"detail": "Bearer token required",
"instance": "<string>",
"realm": "API",
"scope": "read:users"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "<string>",
"status": 404,
"resourceType": "user",
"resourceId": "<string>",
"type": "about:blank",
"detail": "<string>",
"instance": "<string>"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}Authorizations
User bearer credential: either a Cognito JWT or an ak_ user API key. Backend integrators using HMAC must include the user API key alongside the three HMAC headers on user-scoped endpoints.
Headers
Unique key for this deposit intent. Reuse it verbatim after a timeout to replay the original response. Reusing it with a different request returns an idempotency conflict.
1 - 255"deposit-order-7f3f4d4d"
Body
Opaque public preparation identifier returned by direct prepare
"prep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X"
Response
An ACH debit deposit authorized by the user and processed asynchronously through debit and crypto release lifecycles.
An ACH debit deposit authorized by the user and processed asynchronously through debit and crypto release lifecycles.
Opaque public deposit identifier
"dep_01JV7Q8M4Y8K6N2Z5P3R1T9W0X"
Opaque public funding source identifier
"fs_01JV7Q8M4Y8K6N2Z5P3R1T9W0X"
Identifier of the on-ramp created for this deposit, or null until the on-ramp record exists.
"onramp_xyz789"
authorized, processing, partially_released, completed, returned, refunded, failed exact_input, exact_output normal, high normal, high Show child attributes
Show child attributes
solana, ethereum, polygon, base, avalanche, arbitrum Asset sent to the deposit destination
USDC "USDC"
Destination wallet address for the crypto release
authorized, submitting, submitted, settled, returned, failed not_started, queued, partial, completed, failed after_settlement, early_full, early_partial