KulPayAPI Live

API reference

Connectors

GET /v1/admin/data-transfers

The cross-border transfer register

One entry per acquirer outside the region (PSP-12.3): legal entity, country, the fields its allow-list permits and the fields sent so far, transfers and fields dropped, legal basis, data processing agreement, last and next review. Every outbound payload to such a connector carries only its allowed fields; any other field is dropped before the call (data_transfer.blocked_field) and each call records data_transfer.sent. A transfer that cannot be recorded is not sent. Requires connectors:read.

Responses

  • 200 {data, total}.

Request

curl -X GET "$KULPAY_URL/v1/admin/data-transfers" \
  -H "Authorization: Bearer $KULPAY_KEY"
200 Response application/json
{
  "data": [
    {
      "blocked_fields": 2210,
      "connector": "stripe",
      "country": "IE",
      "created_at": "2026-01-20T08:00:00Z",
      "dpa_reference": "DPA-STRIPE-2026-01",
      "fields_allowed": "[\"amount\",\"currency\",\"metadata.billing_country\",\"metadata.email\",\"metadata.kulpay_challenge\",\"metadata.merchant_reference\",\"metadata.order_id\",\"payment_id\",\"return_url\",\"source.card.token\"]",
      "fields_sent": "[\"amount\",\"currency\",\"metadata.merchant_reference\",\"payment_id\",\"return_url\",\"source.card.token\"]",
      "id": "3K3cStcRGSc7g3n7YaS9mOyEJ7L",
      "last_transfer_at": "2026-10-11T10:59:12Z",
      "legal_basis": "Contract performance (Lei n.º 3/2017, art. 59) with standard contractual clauses",
      "legal_entity": "Stripe Payments Europe, Limited",
      "next_review_at": "2027-03-15T09:00:00Z",
      "reviewed_at": "2026-03-15T09:00:00Z",
      "reviewed_by": "operator:7f3c9a2e-5b1d-4e8a-9c6f-2d4b8e1a0c37",
      "transfers": 18342,
      "updated_at": "2026-10-11T10:59:12Z"
    }
  ],
  "total": 1
}

GET /v1/admin/data-transfers/export

Export the register for regulators

The register as CSV, signed (X-Signature, X-Signing-Key-ID) when a report signing key is configured. Requires connectors:read.

Responses

  • 200 text/csv.

Request

curl -X GET "$KULPAY_URL/v1/admin/data-transfers/export" \
  -H "Authorization: Bearer $KULPAY_KEY"

PATCH /v1/admin/data-transfers/{connector}

Set the legal basis or record the yearly review

Sets legal_basis and dpa_reference; reviewed: true records the yearly review (both must be set first) and moves the next one a year on. Each entry is announced by data_transfer.register.review_due when its review falls due. Records config.data_transfer_register.saved. Requires connectors:write.

Parameters

NameInTypeDescription
connector requiredpathstring

Request body application/json required

FieldTypeDescription
dpa_referencestring
legal_basisstring
reviewedboolean

Responses

  • 200 The entry.
  • 400 Review recorded without a legal basis or DPA. invalid_request
  • 404 No entry for that connector. not_found

Request

curl -X PATCH "$KULPAY_URL/v1/admin/data-transfers/{connector}" \
  -H "Authorization: Bearer $KULPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dpa_reference": "2003014567",
  "legal_basis": "string",
  "reviewed": true
}'
200 Response application/json
{
  "blocked_fields": 2210,
  "connector": "stripe",
  "country": "IE",
  "created_at": "2026-01-20T08:00:00Z",
  "dpa_reference": "DPA-STRIPE-2026-01",
  "fields_allowed": "[\"amount\",\"currency\",\"metadata.billing_country\",\"metadata.email\",\"metadata.kulpay_challenge\",\"metadata.merchant_reference\",\"metadata.order_id\",\"payment_id\",\"return_url\",\"source.card.token\"]",
  "fields_sent": "[\"amount\",\"currency\",\"metadata.merchant_reference\",\"payment_id\",\"return_url\",\"source.card.token\"]",
  "id": "3K3cStcRGSc7g3n7YaS9mOyEJ7L",
  "last_transfer_at": "2026-10-11T10:59:12Z",
  "legal_basis": "Contract performance (Lei n.º 3/2017, art. 59) with standard contractual clauses",
  "legal_entity": "Stripe Payments Europe, Limited",
  "next_review_at": "2027-10-11T11:10:00Z",
  "reviewed_at": "2026-10-11T11:10:00Z",
  "reviewed_by": "3KIhzpLdNupTuLgu8bwZOQspar2",
  "transfers": 18342,
  "updated_at": "2026-10-11T11:10:00Z"
}
400 Error · invalid_request application/problem+json
{
  "code": "invalid_request",
  "detail": "set the legal basis and the data processing agreement before recording the review",
  "error": {
    "code": "invalid_request",
    "message": "set the legal basis and the data processing agreement before recording the review"
  },
  "status": 400,
  "title": "Bad Request",
  "type": "about:blank"
}
404 Error · not_found application/problem+json
{
  "code": "not_found",
  "detail": "no register entry for that connector",
  "error": {
    "code": "not_found",
    "message": "no register entry for that connector"
  },
  "status": 404,
  "title": "Not Found",
  "type": "about:blank"
}