Verify Authorization Token
Verify an Authorization Token by its code value.
This endpoint is used by DAFs in the Donor-Initiated Verification flow: when a donor presents the code they received from DAFpay (via email after submitting a Grant Request), the DAF calls this endpoint with the code to confirm the donor's identity.
On success:
- The Authorization Token transitions to verified.
- The linked Donor Account is automatically transitioned to approved if it is currently pending.
- The full Donor Account is returned (including the id you can use to call subsequent endpoints).
Codes are only valid until the token's expires_at — 30 days after creation by default (configurable via expires_in on Create Authorization Token, 60 seconds to 90 days). After that point, the token's status becomes expired and verification will fail. If the donor's code has expired, prompt them to submit a new Grant Request — DAFpay will issue and email a fresh code automatically.
<Warning> Error handling: - If the `code` is unknown, expired, revoked, or already verified, the request will return status `404 Not Found` or `410 Gone` to avoid leaking information about valid codes. Expired codes are intentionally indistinguishable from other invalid codes in the response — surface a generic "code is invalid or has expired" message to the donor and ask them to request a new code. - If the linked Donor Account has already been rejected, the request will return status `409 Conflict`. - To prevent brute-force attacks, this endpoint enforces strict per-DAF rate limits. Repeated failures will return status `429 Too Many Requests`. </Warning>Request body
Example request
{
"code": "DAFP-7K3X-9M4Q",
"external_id": "ACME-DAF-DONOR-1042"
}Response
The token was successfully verified and the Donor Account was approved.
Example response
{
"id": "donor_account_01jpjenf5q6cawy43yxfcrxhct",
"status": "pending",
"donor": {
"email": "warrenBuffet@example.com",
"first_name": "Warren",
"last_name": "Buffet",
"phone": "+12125550100"
},
"external_id": "ACME-DAF-DONOR-1042",
"approval": {
"approved_at": "2026-04-02T18:30:00Z",
"approved_by": "daf:fid_01jpjenf5q6cawy43yxfcrxhct"
},
"rejection": {
"rejected_at": "2026-04-02T18:30:00Z",
"rejected_by": "daf:fid_01jpjenf5q6cawy43yxfcrxhct",
"rejection_reason": "Donor could not be located in our records."
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-02T18:30:00Z"
}Changes
Changed in 7 of the 43 revisions of this API.341550
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
media type
application/jsonwas changed to a more specific media typeapplication/problem+jsonfor the response statusresponse-media-type-name-specialized
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ▲
- ▲
the response property
became nullable for the statusresponse-property-became-nullable
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ○
added the required property
to the response with the statusresponse-required-property-added
- ▲
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ●
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ●
- ▲
the response property
became optional for the statusresponse-property-became-optional
- ▲
the response property
became optional for the statusresponse-property-became-optional
- ▲
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ▲
removed the required property
from the response with the statusresponse-required-property-removed
- ●
removed the request property
request-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ●
removed the optional property
from the response with the statusresponse-optional-property-removed
- ○
added the new optional request property
new-optional-request-property
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the optional property
to the response with the statusresponse-optional-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ○
added the required property
to the response with the statusresponse-required-property-added
- ▲
- ○
endpoint added
endpoint-added
- ○