API reference
Manual evidence
Customer-side submission of deposit slips and reconciliation fields for method=manual payments.
POST /checkout/{id}/manual
Submit manual-payment evidence
Customer-side submission for method=manual payments. Accepts multipart/form-data: any non-empty text field (depositor, bank, branch, reference, note, …) merges into the payment's manual_fields map; an optional file part becomes a manualAttachment tagged uploaded_by: customer. Redirects (303) back to /checkout/{id}/processing with ?manual_submitted=1 on success or ?manual_error=… on file validation failure. Field merge is independent of file validation — a too-large upload doesn't lose typed fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string |
Request body multipart/form-data required
| Field | Type | Description |
|---|---|---|
_csrf | string | Required when `csrf_required: true` is set. |
bank | string | |
branch | string | |
depositor | string | |
file | string (binary) | |
kind | string | |
note | string | |
reference | string |
Responses
- 303 Redirect back to the processing page with a flash query param.
- 400 RFC 7807 problem-details response. The
codefield carries one of the enum values in#/components/schemas/ErrorCode.invalid_request - 404 The named resource was not found.
not_found
Request
curl -X POST "$KULPAY_URL/checkout/{id}/manual" \
-H "Authorization: Bearer $KULPAY_KEY" \
-F "file=@./document.pdf"
400 Error · invalid_request application/problem+json
{
"code": "invalid_request",
"detail": "The request could not be processed.",
"error": {
"code": "invalid_request",
"message": "The request could not be processed."
},
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}
404 Error · not_found application/problem+json
{
"code": "not_found",
"detail": "No payment with this id.",
"error": {
"code": "not_found",
"message": "No payment with this id."
},
"status": 404,
"title": "Not Found",
"type": "about:blank"
}
KulPay