KulPayAPI Live

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

NameInTypeDescription
id requiredpathstring

Request body multipart/form-data required

FieldTypeDescription
_csrfstring Required when `csrf_required: true` is set.
bankstring
branchstring
depositorstring
filestring (binary)
kindstring
notestring
referencestring

Responses

  • 303 Redirect back to the processing page with a flash query param.
  • 400 RFC 7807 problem-details response. The code field 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"
}