curl --request POST \
--url https://api.dev.endaoment.org/v1/transfers/async-grants \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"originFundId": "123e4567-e89b-12d3-a456-426614174000",
"destinationOrgId": "123e4567-e89b-12d3-a456-426614174000",
"requestedAmount": "1000000",
"purpose": "Supporting educational programs",
"destinationSubprojectId": "123e4567-e89b-12d3-a456-426614174000",
"recommender": "John Doe",
"specialInstructions": "Funds must be used exclusively for the summer education program",
"shareMyEmail": false,
"recommendationIds": [
"123e4567-e89b-12d3-a456-426614174000"
]
}
'import requests
url = "https://api.dev.endaoment.org/v1/transfers/async-grants"
payload = {
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"originFundId": "123e4567-e89b-12d3-a456-426614174000",
"destinationOrgId": "123e4567-e89b-12d3-a456-426614174000",
"requestedAmount": "1000000",
"purpose": "Supporting educational programs",
"destinationSubprojectId": "123e4567-e89b-12d3-a456-426614174000",
"recommender": "John Doe",
"specialInstructions": "Funds must be used exclusively for the summer education program",
"shareMyEmail": False,
"recommendationIds": ["123e4567-e89b-12d3-a456-426614174000"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotencyKey: '123e4567-e89b-12d3-a456-426614174000',
originFundId: '123e4567-e89b-12d3-a456-426614174000',
destinationOrgId: '123e4567-e89b-12d3-a456-426614174000',
requestedAmount: '1000000',
purpose: 'Supporting educational programs',
destinationSubprojectId: '123e4567-e89b-12d3-a456-426614174000',
recommender: 'John Doe',
specialInstructions: 'Funds must be used exclusively for the summer education program',
shareMyEmail: false,
recommendationIds: ['123e4567-e89b-12d3-a456-426614174000']
})
};
fetch('https://api.dev.endaoment.org/v1/transfers/async-grants', 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.dev.endaoment.org/v1/transfers/async-grants",
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([
'idempotencyKey' => '123e4567-e89b-12d3-a456-426614174000',
'originFundId' => '123e4567-e89b-12d3-a456-426614174000',
'destinationOrgId' => '123e4567-e89b-12d3-a456-426614174000',
'requestedAmount' => '1000000',
'purpose' => 'Supporting educational programs',
'destinationSubprojectId' => '123e4567-e89b-12d3-a456-426614174000',
'recommender' => 'John Doe',
'specialInstructions' => 'Funds must be used exclusively for the summer education program',
'shareMyEmail' => false,
'recommendationIds' => [
'123e4567-e89b-12d3-a456-426614174000'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.dev.endaoment.org/v1/transfers/async-grants"
payload := strings.NewReader("{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.dev.endaoment.org/v1/transfers/async-grants")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.endaoment.org/v1/transfers/async-grants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "grant",
"status": "approved",
"transactionHash": "0x1234567890abcdef",
"netAmount": "1000000",
"fee": "10000",
"createdAtUtc": "2024-03-20T10:30:00Z",
"requestedAmount": "1000000",
"updatedAtUtc": "2024-03-20T10:30:00Z",
"asyncStatus": "pending",
"chainId": 1,
"destinationOrg": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"ein": "530196605",
"name": "American Red Cross",
"description": "Providing disaster relief and emergency assistance",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip": "94105",
"country": "USA"
},
"website": "https://www.redcross.org",
"logo": "https://example.com/logo.png",
"nteeCode": "E91",
"nteeDescription": "Nursing, Convalescent (Geriatric and Nursing)",
"featuredIndex": 100,
"claimedDateUtc": "2024-03-20T10:30:00Z",
"claimedType": "DIRECT",
"claimed": true,
"contractAddress": "0x1234567890123456789012345678901234567890",
"deployments": [
{
"chainId": 1,
"contractAddress": "0x1234567890123456789012345678901234567890",
"usdcBalance": "2000000",
"isDeployed": true
}
]
},
"destinationSubproject": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"sponsorOrgId": "123e4567-e89b-12d3-a456-426614174000",
"sponsorOrgEin": "123456789",
"ein": "123456789",
"name": "Education Initiative",
"description": "Supporting educational programs in underserved communities",
"website": "https://example.org/initiative",
"logo": "https://example.org/images/logo.png",
"nteeCode": "E91",
"nteeDescription": "Nursing, Convalescent (Geriatric and Nursing)",
"featuredIndex": 100,
"lifetimeContributionsUsdc": "1000000"
},
"recommender": "John Doe",
"purpose": "Supporting educational programs",
"specialInstructions": "Funds must be used exclusively for the summer education program"
}Create async grant
Creates a pending (async) grant request that will be processed by Endaoment. The grant will be in a pending state until it is fully processed.
This endpoint requires authentication and the user must have permission to create grants from the specified fund.
curl --request POST \
--url https://api.dev.endaoment.org/v1/transfers/async-grants \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"originFundId": "123e4567-e89b-12d3-a456-426614174000",
"destinationOrgId": "123e4567-e89b-12d3-a456-426614174000",
"requestedAmount": "1000000",
"purpose": "Supporting educational programs",
"destinationSubprojectId": "123e4567-e89b-12d3-a456-426614174000",
"recommender": "John Doe",
"specialInstructions": "Funds must be used exclusively for the summer education program",
"shareMyEmail": false,
"recommendationIds": [
"123e4567-e89b-12d3-a456-426614174000"
]
}
'import requests
url = "https://api.dev.endaoment.org/v1/transfers/async-grants"
payload = {
"idempotencyKey": "123e4567-e89b-12d3-a456-426614174000",
"originFundId": "123e4567-e89b-12d3-a456-426614174000",
"destinationOrgId": "123e4567-e89b-12d3-a456-426614174000",
"requestedAmount": "1000000",
"purpose": "Supporting educational programs",
"destinationSubprojectId": "123e4567-e89b-12d3-a456-426614174000",
"recommender": "John Doe",
"specialInstructions": "Funds must be used exclusively for the summer education program",
"shareMyEmail": False,
"recommendationIds": ["123e4567-e89b-12d3-a456-426614174000"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotencyKey: '123e4567-e89b-12d3-a456-426614174000',
originFundId: '123e4567-e89b-12d3-a456-426614174000',
destinationOrgId: '123e4567-e89b-12d3-a456-426614174000',
requestedAmount: '1000000',
purpose: 'Supporting educational programs',
destinationSubprojectId: '123e4567-e89b-12d3-a456-426614174000',
recommender: 'John Doe',
specialInstructions: 'Funds must be used exclusively for the summer education program',
shareMyEmail: false,
recommendationIds: ['123e4567-e89b-12d3-a456-426614174000']
})
};
fetch('https://api.dev.endaoment.org/v1/transfers/async-grants', 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.dev.endaoment.org/v1/transfers/async-grants",
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([
'idempotencyKey' => '123e4567-e89b-12d3-a456-426614174000',
'originFundId' => '123e4567-e89b-12d3-a456-426614174000',
'destinationOrgId' => '123e4567-e89b-12d3-a456-426614174000',
'requestedAmount' => '1000000',
'purpose' => 'Supporting educational programs',
'destinationSubprojectId' => '123e4567-e89b-12d3-a456-426614174000',
'recommender' => 'John Doe',
'specialInstructions' => 'Funds must be used exclusively for the summer education program',
'shareMyEmail' => false,
'recommendationIds' => [
'123e4567-e89b-12d3-a456-426614174000'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.dev.endaoment.org/v1/transfers/async-grants"
payload := strings.NewReader("{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.dev.endaoment.org/v1/transfers/async-grants")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.endaoment.org/v1/transfers/async-grants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotencyKey\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"originFundId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"destinationOrgId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"requestedAmount\": \"1000000\",\n \"purpose\": \"Supporting educational programs\",\n \"destinationSubprojectId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"recommender\": \"John Doe\",\n \"specialInstructions\": \"Funds must be used exclusively for the summer education program\",\n \"shareMyEmail\": false,\n \"recommendationIds\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"type": "grant",
"status": "approved",
"transactionHash": "0x1234567890abcdef",
"netAmount": "1000000",
"fee": "10000",
"createdAtUtc": "2024-03-20T10:30:00Z",
"requestedAmount": "1000000",
"updatedAtUtc": "2024-03-20T10:30:00Z",
"asyncStatus": "pending",
"chainId": 1,
"destinationOrg": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"ein": "530196605",
"name": "American Red Cross",
"description": "Providing disaster relief and emergency assistance",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip": "94105",
"country": "USA"
},
"website": "https://www.redcross.org",
"logo": "https://example.com/logo.png",
"nteeCode": "E91",
"nteeDescription": "Nursing, Convalescent (Geriatric and Nursing)",
"featuredIndex": 100,
"claimedDateUtc": "2024-03-20T10:30:00Z",
"claimedType": "DIRECT",
"claimed": true,
"contractAddress": "0x1234567890123456789012345678901234567890",
"deployments": [
{
"chainId": 1,
"contractAddress": "0x1234567890123456789012345678901234567890",
"usdcBalance": "2000000",
"isDeployed": true
}
]
},
"destinationSubproject": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"sponsorOrgId": "123e4567-e89b-12d3-a456-426614174000",
"sponsorOrgEin": "123456789",
"ein": "123456789",
"name": "Education Initiative",
"description": "Supporting educational programs in underserved communities",
"website": "https://example.org/initiative",
"logo": "https://example.org/images/logo.png",
"nteeCode": "E91",
"nteeDescription": "Nursing, Convalescent (Geriatric and Nursing)",
"featuredIndex": 100,
"lifetimeContributionsUsdc": "1000000"
},
"recommender": "John Doe",
"purpose": "Supporting educational programs",
"specialInstructions": "Funds must be used exclusively for the summer education program"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Unique identifier to prevent duplicate grant requests
"123e4567-e89b-12d3-a456-426614174000"
ID of the fund that is the origin of the grant
"123e4567-e89b-12d3-a456-426614174000"
ID of the organization that will receive the grant
"123e4567-e89b-12d3-a456-426614174000"
The amount in USDC to be granted, in the smallest currency unit (1000000 = 1 USD)
"1000000"
Public declaration of the grant purpose
511"Supporting educational programs"
ID of the subproject that will receive the grant. Must be sponsored by the destination organization
"123e4567-e89b-12d3-a456-426614174000"
Name of the person recommending the grant
255"John Doe"
Binding instructions for the use of granted assets that the receiving organization must accept
"Funds must be used exclusively for the summer education program"
Whether to share the fund's donor-of-record email with the receiving organization. Set by the user recommending the grant.
List of recommendation IDs associated with the grant
["123e4567-e89b-12d3-a456-426614174000"]
Response
Async grant request successfully created
Unique identifier of the transfer
"123e4567-e89b-12d3-a456-426614174000"
Type of transfer, always "grant" for GrantTransferDto
GrantTransfer, EntityTransfer "grant"
Status of the transfer (deprecated)
PendingReview, Approved, Rejected "approved"
Transaction hash of the donation made to the target entity
"0x1234567890abcdef"
Net output amount for the transfer (total - fees) in USDC smallest currency unit (1000000 = 1 USD)
"1000000"
Fee charged on this transfer in USDC smallest currency unit (1000000 = 1 USD)
"10000"
UTC timestamp when the transfer was created
"2024-03-20T10:30:00Z"
Requested amount for the transfer in USDC smallest currency unit (1000000 = 1 USD) (only for async transfers)
"1000000"
UTC timestamp when the transfer was last updated
"2024-03-20T10:30:00Z"
Current status of the async transfer request
PendingLiquidation, Liquidated, Cancelled "pending"
Chain ID where the transfer occurred (null for async transfers)
1
Organization receiving the grant. Null if the grant is for a subproject.
Show child attributes
Show child attributes
Subproject receiving the grant. Null if the grant is for an organization.
Show child attributes
Show child attributes
Name of the person who recommended the grant
"John Doe"
Purpose of the grant
"Supporting educational programs"
Special instructions for the use of granted assets
"Funds must be used exclusively for the summer education program"
Was this page helpful?