Grant Request Lifecycle
When a donor submits a grant via DAFpay, a Grant Request is created and tied to their Donor Account. Its status advances based on the state of the Donor Account and your actions as a DAF.
Statuses
A Grant Request in awaiting_account_decision cannot be submitted until its linked Donor Account reaches approved status. If the Donor Account is rejected, all open Grant Requests tied to it are automatically moved to rejected.
Submitting a Grant Request
Once a Grant Request is in pending, submit it in your internal system and then call Submit Grant Request to mark it as submitted. Optionally pass external_grant_id to link it to your internal grants ledger.
The Grant Request moves to submitted and a grant_request.updated webhook is emitted — fetch the Grant Request to confirm its current status.
Rejecting a Grant Request
If you cannot process a Grant Request, call Reject Grant Request. The reason is stored for auditing and is not shown to the donor.
The Grant Request moves to rejected and a grant_request.updated webhook is emitted — fetch the Grant Request to confirm its current status. The Donor Account is unaffected — future Grant Requests from the same donor can still be processed.
Bulk processing
Use List Grant Requests filtered by status=pending and iterate. There is no bulk endpoint — each action is independent.
Idempotency
submitted and rejected are terminal. Calling submit or reject on an already-decided Grant Request returns 409 Conflict. To safely retry on network errors, call Get Grant Request first and check status before retrying.

