payment-links
Version 0.1.08 operations
Payment links of the organisation, newest first, keyset paginated
GET/payment-linksAPI key
Parameters
cursoranyquerylimitintegerquery- max: 200
- default: 50
qanyqueryTitle contains (case insensitive)
accountanyqueryPayment account id
statusstringquery- enum: "active", "disabled", "expired", "completed"
organisationIdanyqueryRequired with a session
Responses
200
itemsPaymentLinkDto[]requiredidstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
nextCursorstring | nullrequired
Code samples
curl -X GET "$KONNECT_API_URL/payment-links" \
-H "x-api-key: $KONNECT_API_KEY"Example: 200
{
"items": [
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}
],
"nextCursor": "nextCursor"
}Create a payment link
POST/payment-linksAPI key
A fixed or open amount, single use or reusable (with an optional cap), an optional expiry. Honours the Idempotency-Key header.
Parameters
Idempotency-Keystringheader
Request body application/json
descriptionstring | null- maxLength: 500
amountnumber | nullFixed amount, minor units
minAmountnumber | nullOpen amount: lower bound (default 100)
maxAmountnumber | nullOpen amount: upper bound
maxUsesnumber | nullReusable: successful payments accepted; null for no limit
- max: 100000
expiresAtstring (date-time) | nullacceptedProvidersstring[]Providers offered, within the account routing; empty or omitted: every routed one
payerFieldsPayerFieldsDtonamestringFirst and last name
- enum: "hidden", "optional", "required"
emailstringReceives the receipt
- enum: "hidden", "optional", "required"
phonestring- enum: "hidden", "optional", "required"
successMessagestring | null- maxLength: 280
redirectUrlstring | nullorganisationIdstring (uuid)Required with a session; ignored with an API key
paymentAccountIdstring (uuid)The default account when omitted
titlestringrequired- maxLength: 80
amountTypestringrequiredfixed: amount; open: the payer types it
- enum: "fixed", "open"
usagestringrequiredsingle: one successful payment
- enum: "single", "reusable"
Responses
201
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
400validation_failed, amount_required, amount_not_allowed, amount_bounds_invalid, max_uses_invalid, expiry_invalid, provider_not_routed
403permission_denied or account_out_of_scope
409payment_account_inactive
Code samples
curl -X POST "$KONNECT_API_URL/payment-links" \
-H "x-api-key: $KONNECT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "description",
"amount": 25000,
"minAmount": 1,
"maxAmount": 1,
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "https://shop.example.test/merci",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "Cours de yoga, séance du samedi",
"amountType": "fixed",
"usage": "single"
}'Example: request body
{
"description": "description",
"amount": 25000,
"minAmount": 1,
"maxAmount": 1,
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "https://shop.example.test/merci",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "Cours de yoga, séance du samedi",
"amountType": "fixed",
"usage": "single"
}Example: 201
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}One payment link
GET/payment-links/{linkId}API key
Parameters
linkIdstringpathrequired
Responses
200
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
404payment_link_not_found
Code samples
curl -X GET "$KONNECT_API_URL/payment-links/linkId" \
-H "x-api-key: $KONNECT_API_KEY"Example: 200
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}Change a payment link
PATCH/payment-links/{linkId}API key
Any setting but the payment account and the slug. Payments already started keep their amounts. Raising the cap of a completed link makes it active again.
Parameters
linkIdstringpathrequired
Request body application/json
descriptionstring | null- maxLength: 500
amountnumber | nullFixed amount, minor units
minAmountnumber | nullOpen amount: lower bound (default 100)
maxAmountnumber | nullOpen amount: upper bound
maxUsesnumber | nullReusable: successful payments accepted; null for no limit
- max: 100000
expiresAtstring (date-time) | nullacceptedProvidersstring[]Providers offered, within the account routing; empty or omitted: every routed one
payerFieldsPayerFieldsDtonamestringFirst and last name
- enum: "hidden", "optional", "required"
emailstringReceives the receipt
- enum: "hidden", "optional", "required"
phonestring- enum: "hidden", "optional", "required"
successMessagestring | null- maxLength: 280
redirectUrlstring | nulltitlestring- maxLength: 80
amountTypestring- enum: "fixed", "open"
usagestring- enum: "single", "reusable"
Responses
200
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
404payment_link_not_found
Code samples
curl -X PATCH "$KONNECT_API_URL/payment-links/linkId" \
-H "x-api-key: $KONNECT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "description",
"amount": 25000,
"minAmount": 1,
"maxAmount": 1,
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "https://shop.example.test/merci",
"title": "title",
"amountType": "fixed",
"usage": "single"
}'Example: request body
{
"description": "description",
"amount": 25000,
"minAmount": 1,
"maxAmount": 1,
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "https://shop.example.test/merci",
"title": "title",
"amountType": "fixed",
"usage": "single"
}Example: 200
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}Disable a payment link: no new payment; started ones go on
POST/payment-links/{linkId}/disableAPI key
Parameters
linkIdstringpathrequired
Responses
200
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
Code samples
curl -X POST "$KONNECT_API_URL/payment-links/linkId/disable" \
-H "x-api-key: $KONNECT_API_KEY"Example: 200
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}Enable a disabled payment link again
POST/payment-links/{linkId}/enableAPI key
Parameters
linkIdstringpathrequired
Responses
200
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
409link_not_disabled
Code samples
curl -X POST "$KONNECT_API_URL/payment-links/linkId/enable" \
-H "x-api-key: $KONNECT_API_KEY"Example: 200
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}A new link with the same settings, a new slug and no payment
POST/payment-links/{linkId}/duplicateAPI key
Parameters
linkIdstringpathrequired
Responses
201
idstring (uuid)requiredslugstringrequiredurlstringrequiredPublic page of the link on the checkout
organisationIdstring (uuid)requiredpaymentAccountIdstring (uuid)requiredtitlestringrequireddescriptionstring | nullrequiredamountTypestringrequired- enum: "fixed", "open"
amountnumber | nullrequiredminAmountnumber | nullrequiredmaxAmountnumber | nullrequiredcurrencystringrequiredusagestringrequired- enum: "single", "reusable"
maxUsesnumber | nullrequiredexpiresAtstring (date-time) | nullrequiredacceptedProvidersstring[]requiredpayerFieldsPayerFieldSettingsDtorequirednamestringrequired- enum: "hidden", "optional", "required"
emailstringrequired- enum: "hidden", "optional", "required"
phonestringrequired- enum: "hidden", "optional", "required"
successMessagestring | nullrequiredredirectUrlstring | nullrequiredstatusstringrequiredEffective status (expired from expiresAt)
- enum: "active", "disabled", "expired", "completed"
paymentsCountnumberrequiredPayments started from the link
succeededCountnumberrequiredcollectedAmountnumberrequiredSum of the succeeded amounts, minor units
disabledAtstring (date-time) | nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)required
Code samples
curl -X POST "$KONNECT_API_URL/payment-links/linkId/duplicate" \
-H "x-api-key: $KONNECT_API_KEY"Example: 201
{
"id": "id",
"slug": "Ab3dE6gH9jK2",
"url": "url",
"organisationId": "org_01J9Z3K4EXAMPLE0000000000",
"paymentAccountId": "paymentAccountId",
"title": "title",
"description": "description",
"amountType": "fixed",
"amount": 1,
"minAmount": 1,
"maxAmount": 1,
"currency": "TND",
"usage": "single",
"maxUses": 1,
"expiresAt": "2026-10-01T09:30:00.000Z",
"acceptedProviders": [
"clictopay"
],
"payerFields": {
"name": "hidden",
"email": "buyer@example.com",
"phone": "hidden"
},
"successMessage": "successMessage",
"redirectUrl": "redirectUrl",
"status": "active",
"paymentsCount": 1,
"succeededCount": 1,
"collectedAmount": 1,
"disabledAt": "2026-10-01T09:30:00.000Z",
"createdAt": "2026-10-01T09:30:00.000Z",
"updatedAt": "2026-10-01T09:30:00.000Z"
}Payments of a link by status, collected amount and conversion
GET/payment-links/{linkId}/statsAPI key
Parameters
linkIdstringpathrequired
Responses
200
paymentsCountnumberrequiredsucceededCountnumberrequiredpendingCountnumberrequiredfailedCountnumberrequiredexpiredCountnumberrequiredcanceledCountnumberrequiredcollectedAmountnumberrequiredMinor units
conversionRatenumberrequiredSucceeded over started, 0 to 1
lastPaymentAtstring (date-time) | nullrequired
Code samples
curl -X GET "$KONNECT_API_URL/payment-links/linkId/stats" \
-H "x-api-key: $KONNECT_API_KEY"Example: 200
{
"paymentsCount": 1,
"succeededCount": 1,
"pendingCount": 1,
"failedCount": 1,
"expiredCount": 1,
"canceledCount": 1,
"collectedAmount": 1,
"conversionRate": 1,
"lastPaymentAt": "2026-10-01T09:30:00.000Z"
}