v1
latestOpenAPI 3.1.02026-07-2469193340.0 KBAdd a KYC Agreement
Create an Agreement against a KYC-trusted account holder's bank account.
The calling account must be flagged as kyc_trusted. If it is not, a 400 Bad Request will be returned with must_be_kyc_trusted.
When the optional bank connection attributes (basiq_user_id, basiq_connection_id, proviso_reference, credit_sense_app_id) are provided, the Agreement is created in the unverified state and bank connection verification is queued asynchronously. When verification succeeds the Agreement transitions to accepted; when it fails the Agreement transitions to declined and the failure reason is recorded on status_reason. The verification outcome is not reflected in this endpoint's response - listen for the corresponding agreement.accepted or agreement.declined webhook to observe the final state.
When no bank connection attributes are provided, the Agreement is auto-accepted before the response is returned.
Headers
API version in YYYYMMDD format. Defaults to 20250101 (legacy) when omitted.
Request body
Example request
{
"authoriser": {
"name": "Jane Doe",
"email": "jane.doe@example.com",
"bank_account": {
"branch_code": "123458",
"account_number": "77564441"
}
},
"terms": {
"per_payout": {
"min_amount": null,
"max_amount": null
},
"per_frequency": {
"days": null,
"max_amount": null
}
}
}Response
OK
Example response
{
"data": {
"ref": "A.2",
"initiator_id": "4e2728cc-b4ba-42c2-a6c3-26a7758de58d",
"authoriser_id": "8df89c16-330f-462b-8891-808d7bdceb7f",
"contact_id": "0d290763-bd5a-4b4d-a8ce-06c64c4a697b",
"bank_account_id": "fb9381ec-22af-47fd-8998-804f947aaca3",
"status": "accepted",
"status_reason": null,
"responded_at": "2026-05-11T02:13:11Z",
"created_at": "2026-05-11T00:53:27Z",
"terms": {
"per_payout": {
"max_amount": null,
"min_amount": null
},
"per_frequency": {
"days": null,
"max_amount": null
}
},
"open_agreement_id": null
}
}