slikair
Back to Developer Zone

Slikair API DOC - V2

JSON in, JSON out. Authenticate with a merchant-token header and send a unique Idempotency-Key on create calls.

Version 2.0https://devsilo.xyz/api/v2support@slikair.com

Overview

The slikair Payments API

This page documents the Slikair V2 API only: environments, authentication, the merchant JWT used for tokenization, every endpoint group, webhook events, schema tables and the code tables you need when handling responses and notifications.

Schema tables are based on the provided Slikair V2 OpenAPI path, webhook, security and component files.

Slikair API DOC - V2

Version 2.0

https://devsilo.xyz/api/v2

Environments

Sandbox first, then live

Sandbox

https://devsilo.xyz/api/v2

Mirrors live behaviour for testing with the Demo provider. Note that sandbox does not support payouts.

Live

Provided by the slikair team

Your live account and base URL are provided by the slikair team when you are ready to go live.

Authentication

merchant-token on every call

  • All requests and responses are JSON.
  • Standard HTTP verbs and status codes are used.
  • Authenticate every call with a merchant-token header.
  • Create calls require a unique Idempotency-Key header per payment attempt.
SchemeTypeWhere to find it
merchant-tokenapiKey — headerAuthenticates API requests. Found in My Account > Integration settings.
merchant_idapiKey-style credential identifierProvided by slikair. Found in My Account > Integration settings.
merchant_site_idapiKey-style site identifierProvided by slikair. Found in My Account > Integration settings.

Merchant JWT

Signed card data for tokenization

  • The tokenization endpoints /payment/create/tokenization and /payment/create/token require a merchant_jwt.
  • The JWT is a standard header.payload.signature string.
  • The payload is read for card data or the stored token reference.
  • The signature is verified downstream by the payment gateway and the Card Data Vault.
  • JWTs are signed with EdDSA (Ed25519); include kid in the header for the key id.
  • The signing key is provisioned during onboarding; contact support@slikair.com to enable tokenization and obtain it.
  • iat must be within 120 seconds of server time.

Tokenize (op = tokenize)

jtiUnique JWT id
optokenize
submerchant_id
iatIssued-at, within 120 seconds of server time
cardholder_numberCard number
cardholder_nameCardholder name
cardholder_exp_monthExpiry month
cardholder_exp_yearExpiry year

Pay with token (op = decrypt)

jtiUnique JWT id
opdecrypt
submerchant_id
iatIssued-at, within 120 seconds of server time
tokenStored card token reference

Endpoints

Payment, tokenization and payout sessions

Payment sessions

Create a customer payment and read its current state.

POST/payment/createCreate PaymentcreatePaymentV2

Initiates a payment transaction. The request structure varies by payment_method.

Headers

merchant-tokenContent-TypeIdempotency-Key

Request schema

V2PaymentRequest

Responses

200V2PaymentResponse
400V2ErrorResponse
401V2ErrorResponse
500V2ErrorResponse

Examples

credit_cardcryptoopen_bankingblikgooglepayapplepayinterac
Example — credit_card
curl -X POST https://devsilo.xyz/api/v2/payment/create \
  -H "merchant-token: $SLIKAIR_MERCHANT_TOKEN" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -H "Content-Type: application/json" \
  -d '{
    "merchant_id": "9e07802d51264b02b4b3ef09dfb94219",
    "merchant_site_id": "1234",
    "payment_method": "credit_card",
    "device_ip": "203.0.113.10",
    "amount": 99.99,
    "currency": "EUR",
    "email": "john.doe@example.com",
    "request_id": "order-1001",
    "country": "NLD",
    "first_name": "John",
    "last_name": "Doe",
    "notification_link": "https://example.com/webhook",
    "success_url": "https://example.com/success",
    "pending_url": "https://example.com/pending",
    "fail_url": "https://example.com/fail",
    "back_url": "https://example.com/cart",
    "mobile": "+31600000000",
    "address": "Main Street 1",
    "city": "Amsterdam",
    "zipCode": "1011AB",
    "state": "NH",
    "birthDate": "1990-01-01",
    "cardNum": "4111111111111111",
    "cardHolder": "John Doe",
    "cardExpireMonth": "12",
    "cardExpireYear": "2030",
    "cardCvv": "123"
  }'
POST/payment/get-statusGet Payment StatusgetPaymentStatusV2

Retrieves the current status of a payment transaction.

Headers

merchant-tokenContent-Type

Request schema

V2GetPaymentStatusRequest

Responses

200V2GetPaymentStatusResponse
400V2ErrorResponseValidation error
401V2ErrorResponseUnauthorized
Example request
{
  "merchant_id": "9e07802d51264b02b4b3ef09dfb94219",
  "payin_id": "b0f8f0f4-1f5d-4d1a-8f0e-9c1d2e3f4a5b"
}

Tokenization

Vault card data with a merchant-signed JWT, then charge the stored token.

POST/payment/create/tokenizationCreate Payment TokenizationcreateTokenization

Initiates a credit-card payment and vaults the card for later use with /payment/create/token. The tokenization result arrives asynchronously at tokenization_notification_url. Credit cards only, consent must be true, and card data is supplied inside merchant_jwt.

Headers

merchant-tokenContent-TypeIdempotency-Key

Request schema

V2TokenizationRequest

Responses

200V2PaymentResponse
400V2ErrorResponse
401V2ErrorResponse
500V2ErrorResponse

Examples

credit_card_tokenize
Example — tokenization JWT payload
{
  "jti": "e0f0a2f4-6f1e-4a5b-9a0e-1f2c3d4e5f60",
  "op": "tokenize",
  "sub": "9e07802d51264b02b4b3ef09dfb94219",
  "iat": 1735689600,
  "cardholder_number": "4111111111111111",
  "cardholder_name": "John Doe",
  "cardholder_exp_month": "12",
  "cardholder_exp_year": "2030"
}
POST/payment/create/tokenCreate Payment with TokencreateWithToken

Charges a vaulted card by redeeming the token inside merchant_jwt. No PAN, cardholder name or expiry is sent; CVV is collected on every charge. The merchant_jwt payload uses op=decrypt, sub and token.

Headers

merchant-tokenContent-TypeIdempotency-Key

Request schema

V2PayWithTokenRequest

Responses

200V2PaymentResponse
400V2ErrorResponse
401V2ErrorResponse
500V2ErrorResponse

Examples

pay_with_token
Example — pay-with-token JWT payload
{
  "jti": "b71c9f0a-2c33-4d7e-8f61-52a0d9c7e311",
  "op": "decrypt",
  "sub": "9e07802d51264b02b4b3ef09dfb94219",
  "iat": 1735689600,
  "token": "tok_9f8c1b2a3d4e"
}

Payout sessions

Send funds to the consumer and track the payout state.

POST/payouts/createCreate payoutcreatePayoutV2

Creates a payout withdrawal with multiple methods and modes. Sandbox does not support payouts.

Headers

merchant-tokenContent-TypeIdempotency-Key

Request schema

V2PayoutRequest

Responses

200V2PayoutResponse
400V2PayoutCreateError
401V2PayoutError
500V2PayoutError

Examples

credit_cardcryptoopen_bankingfps
Example — credit_card payout
{
  "merchant_id": "9e07802d51264b02b4b3ef09dfb94219",
  "site_id": "1234",
  "method": "credit_card",
  "mode": "direct",
  "amount": 50.00,
  "currency": "EUR",
  "merchantReference": "payout-2001",
  "country": "NLD",
  "notificationUrl": "https://example.com/payout-webhook",
  "customer": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "phone": "+31600000000"
  },
  "paymentDetails": {
    "method": "credit_card",
    "cardNum": "4111111111111111",
    "cardHolder": "John Doe",
    "cardExpireMonth": "12",
    "cardExpireYear": "2030"
  }
}
POST/payouts/get-statusGet Payout StatusgetPayoutStatusV2

Retrieves the payout status by payout ID.

Headers

merchant-tokenContent-Type

Request schema

V2PayoutStatusRequest

Responses

200V2PayoutStatusResponse
400V2PayoutError
500V2PayoutError

Webhooks

Direct Merchant Notifications

EventSummaryRequest schemaResponse
v2_payin_notificationPayIn Notification (DMN)Server-to-server notification with the final pay-in result.V2PayinNotification200 acknowledges receipt
v2_tokenization_notificationTokenization Result NotificationDelivered to tokenization_notification_url with the vaulted token and card metadata.V2TokenizationNotification200 acknowledges receipt
v2_payout_notificationPayout notificationServer-to-server notification with the payout result.V2PayoutWebhook200 acknowledges receipt

Schemas

Request, response and notification objects

Schema tables are based on the provided Slikair V2 OpenAPI path, webhook, security and component files.

V2PaymentRequest

Body of POST /payment/create. Method-specific fields apply per payment_method.

FieldRequiredTypeDescriptionExample
merchant_idrequiredstringMerchant identifier from Integration settings.
merchant_site_idrequiredstringSite identifier from Integration settings.
payment_methodrequiredenumOne of the supported V2 payment methods.credit_card
amountrequirednumber2 decimals for fiat, up to 10 decimals for crypto.99.99
currencyrequiredstringISO 4217 currency code.EUR
emailrequiredstringCustomer email address.
request_idrequiredstringUnique merchant reference for the attempt.
countryrequiredstringISO 3166-1 alpha-3 country code.NLD
notification_linkrequiredstring (uri)Webhook URL for the pay-in notification.
success_urlrequiredstring (uri)Redirect on success.
pending_urlrequiredstring (uri)Redirect while pending.
fail_urlrequiredstring (uri)Redirect on failure.
back_urlrequiredstring (uri)Redirect when the customer goes back.
device_iprequiredstringCustomer device IP address.
first_namerequiredstring
last_namerequiredstring
mobileoptionalstringRequired for credit_card, credit_card_ftd, interac, blik, googlepay, applepay.
addressoptionalstringRequired for credit_card, credit_card_ftd, interac, googlepay, applepay.
cityoptionalstringRequired for the same methods as address.
zipCodeoptionalstringRequired for the same methods as address.
stateoptionalstringRequired for credit_card, credit_card_ftd, googlepay, applepay.
birthDateoptionalstringRequired for the same methods as state.
cardNumoptionalstringRequired for credit_card and credit_card_ftd.
cardHolderoptionalstringRequired for credit_card and credit_card_ftd.
cardExpireMonthoptionalstringRequired for credit_card and credit_card_ftd.
cardExpireYearoptionalstringRequired for credit_card and credit_card_ftd.
cardCvvoptionalstringRequired for credit_card and credit_card_ftd.

V2PaymentMethod

Payment method type. Determines which fields are required.

FieldRequiredTypeDescriptionExample
valuerequiredenumcredit_card | credit_card_ftd | open_banking | crypto | blik | googlepay | applepay | interaccredit_card

V2PaymentResponse

FieldRequiredTypeDescriptionExample
statusoptionalenumsuccess | failed
status_codeoptionalinteger
request_idoptionaluuid / string
payin_idoptionaluuid
redirect_urloptionalstring (uri)
created_atoptionalstring (date-time)

V2ErrorResponse

FieldRequiredTypeDescriptionExample
statusoptionalenumerror
status_codeoptionalinteger
reason_codeoptionalstring
error_codeoptionalstring5 digits
request_idoptionaluuid / string
messageoptionalstring
payin_idoptionaluuid | null
detailsoptionalobjectField validation errors.

V2GetPaymentStatusRequest

FieldRequiredTypeDescriptionExample
merchant_idrequiredstring
payin_idrequireduuidPayment identifier returned on create.

V2GetPaymentStatusResponse

FieldRequiredTypeDescriptionExample
statusoptionalenuminitiated | processing | succeeded | failed | kyc_required | refunded | chargeback
status_codeoptionalinteger
payin_idoptionaluuid
request_idoptionalstring
payment_methodoptionalstring
amountoptionalnumber
currencyoptionalstring

V2TokenizationRequest

Body of POST /payment/create/tokenization. Credit cards only.

FieldRequiredTypeDescriptionExample
merchant_idrequiredstring
merchant_site_idrequiredstring
payment_methodrequiredenumcredit_card only.credit_card
amountrequirednumber
currencyrequiredstring
emailrequiredstring
request_idrequiredstring
countryrequiredstringISO 3166-1 alpha-3.
first_namerequiredstring
last_namerequiredstring
notification_linkrequiredstring (uri)
success_urlrequiredstring (uri)
pending_urlrequiredstring (uri)
fail_urlrequiredstring (uri)
back_urlrequiredstring (uri)
device_iprequiredstring
mobilerequiredstring
addressrequiredstring
cityrequiredstring
zipCoderequiredstring
staterequiredstring
birthDaterequiredstring
cardCvvrequiredstringBody field; never tokenized.
merchant_jwtrequiredstringCarries the tokenize card data.
consentrequiredbooleanMust be true.true
tokenization_notification_urlrequiredstring (uri)Receives the tokenization result; separate from notification_link.

V2PayWithTokenRequest

Body of POST /payment/create/token. CVV must be collected on every charge.

FieldRequiredTypeDescriptionExample
merchant_idrequiredstring
merchant_site_idrequiredstring
payment_methodrequiredenumcredit_card only.credit_card
amountrequirednumber
currencyrequiredstring
emailrequiredstring
request_idrequiredstring
countryrequiredstring
first_namerequiredstring
last_namerequiredstring
notification_linkrequiredstring (uri)
success_urlrequiredstring (uri)
pending_urlrequiredstring (uri)
fail_urlrequiredstring (uri)
back_urlrequiredstring (uri)
device_iprequiredstring
mobilerequiredstring
addressrequiredstring
cityrequiredstring
zipCoderequiredstring
staterequiredstring
birthDaterequiredstring
merchant_jwtrequiredstringCarries the decrypt token data.
cardCvvrequiredstringCollected on every charge.

V2PayinNotification

FieldRequiredTypeDescriptionExample
statusoptionalenumprocessing | succeeded | failed | refunded | chargeback
status_codeoptionalinteger
reason_codeoptionalstring
payin_idoptionaluuid
merchant_referenceoptionalstring
payment_methodoptionalstring
amountoptionalnumber
currencyoptionalstring
decline_reasonoptionalstring

V2TokenizationNotification

FieldRequiredTypeDescriptionExample
payin_idrequireduuid
request_idrequiredstring
status_coderequiredinteger
tokenoptionalstringVaulted card token.
brandoptionalstring
last4optionalstring
expDateoptionalstring
error_messageoptionalstring

V2PayoutRequest

FieldRequiredTypeDescriptionExample
merchant_idrequiredstring
methodrequiredenumcredit_card | open_banking | crypto | fps
site_idrequiredstring
moderequiredenumdirect | hosted
amountrequirednumber
currencyrequiredstring
merchantReferencerequiredstring
countryrequiredstring
notificationUrlrequiredstring (uri)
customerrequiredV2PayoutCustomer
successUrloptionalstring (uri)
pendingUrloptionalstring (uri)
failureUrloptionalstring (uri)
paymentDetailsoptionalV2PaymentDetailsDiscriminated by method.

V2PayoutCustomer

FieldRequiredTypeDescriptionExample
firstNamerequiredstring
lastNamerequiredstring
emailrequiredstring
phonerequiredstring

V2PaymentDetails

Discriminated by method: credit_card → V2CreditCardDetails, open_banking → V2OpenBankingDetails, crypto → V2CryptoDetails, fps → V2FpsDetails.

FieldRequiredTypeDescriptionExample
methodrequiredenumcredit_card | open_banking | crypto | fps

V2CreditCardDetails

FieldRequiredTypeDescriptionExample
methodrequiredconstcredit_card
cardNumrequiredstring
cardHolderrequiredstring
cardExpireMonthrequiredstring
cardExpireYearrequiredstring

V2OpenBankingDetails

FieldRequiredTypeDescriptionExample
methodrequiredconstopen_banking
accountNamerequiredstring
ibanrequiredstring
addressrequiredstring
cityrequiredstring
zipCoderequiredstring

V2CryptoDetails

FieldRequiredTypeDescriptionExample
methodrequiredconstcrypto
convertTorequiredenumETH | USDT | USDC | BTC
toAddressrequiredstring

V2FpsDetails

FieldRequiredTypeDescriptionExample
methodrequiredconstfps
accountNamerequiredstring
accountNumberrequiredstring
sortCoderequiredstring
addressrequiredstring
cityrequiredstring
zipCoderequiredstring

V2PayoutResponse

FieldRequiredTypeDescriptionExample
statusoptionalenuminitiated | processing | succeeded | failed
descriptionoptionalstring
timestampoptionalstring (date-time)
payoutIdoptionalstring
requestIdoptionalstring

V2PayoutCreateError

Error body returned by POST /payouts/create.

FieldRequiredTypeDescriptionExample
statusrequiredenumfailedfailed
descriptionrequiredstringHuman readable error summary.invalid request
errorsrequiredstring[]Field level validation errors.[]
payoutIdoptionalintegerPresent only when the payout was created before the failure.123456
reasonCoderequiredstringMachine readable reason.TRANSIENT_ERROR
errorCoderequiredstringNumeric error code.42718

V2PayoutError

Generic payout error body, used by payout status and token flows.

FieldRequiredTypeDescriptionExample
statusrequiredenumfailedfailed
descriptionrequiredstringHuman readable error summary.invalid request
errorsrequiredstring[]Field level validation errors.[]
reasonCoderequiredstringMachine readable reason.INVALID_OR_EXPIRED_TOKEN
errorCoderequiredstringNumeric error code.32201

V2PayoutStatusRequest

FieldRequiredTypeDescriptionExample
merchant_idrequiredstring
payoutIdrequiredstring

V2PayoutStatusResponse

FieldRequiredTypeDescriptionExample
statusoptionalenuminitiated | processing | succeeded | failed
payoutIdoptionalstring
idempotencyKeyoptionalstring

V2PayoutWebhook

FieldRequiredTypeDescriptionExample
statusoptionalenuminitiated | processing | succeeded | failed
reasonoptionalstring
payoutIdoptionalstring
merchantReferenceoptionalstring
amountoptionalnumber
currencyoptionalstring
statusCodeoptionalstring
reasonCodeoptionalstring

Payment methods

Accepted payment_method values

credit_cardcredit_card_ftdopen_bankingcryptoblikgooglepayapplepayinterac

Payout methods

credit_cardopen_bankingcryptofps

Status codes

Payment and payout statuses

Payment status codes

100Pending redirect
101Pending
200Success
301User has deposit in progress, please wait 60 seconds
302Declined due to risk decision
303Customer reached daily deposit limit for this method
304KYC rejected
305User error
306Customer reached daily decline limit for this method
317Invalid CVV - CVV should be between 3 or 4 digits long
318Invalid expiration date - card date must be valid and not expired
319Invalid cardholder name - card holder should be a minimum of one words
320BIN block enforced
401Unsupported country
402Unsupported currency
500Provider declined
501System error
502Unauthorized
503No amount in the request
504Amount is not a valid value
505Wrong site id
506Missing payment method
507Wrong payment method for this provider
508Wrong payment method
509Payment method not enabled for site
510Missing params
511Invalid checksum
512Invalid params values
513User exceeded daily deposit limit by provider
514Merchant not active - contact support team
515An unexpected error occurred. Please try again in a few moments.
516Transaction could not be processed at this time.
517Credit card failed Luhn validation.
518There was an issue with this transaction, please try again.

Payout status codes

P100Payout initiated
P101Payout processing
P200Payout succeeded
C402Invalid or missing required fields in the request
C403Merchant payout wallet is missing
C404Currency not supported for payout
C405Insufficient balance in the wallet for payout
C501General gateway declined

Reason codes

Machine-readable failure reasons

INVALID_REQUESTINVALID_OR_EXPIRED_TOKENINVALID_MERCHANT_JWTINVALID_CHECKSUMINVALID_PARAMSMISSING_PARAMSSYSTEM_ERRORTRANSIENT_ERRORNO_ROUTE_AVAILABLEINVALID_SITEPAYMENT_METHOD_NOT_ENABLEDMERCHANT_INACTIVEUNSUPPORTED_COUNTRYUNSUPPORTED_CURRENCYMISSING_PAYMENT_METHODINVALID_PAYMENT_METHODINVALID_PAYMENT_METHOD_FOR_PROVIDERINVALID_CARD_DATAINVALID_CVVINVALID_CARD_NUMBERINVALID_EXPIRYINVALID_CARDHOLDER_NAMEINVALID_ADDRESSINVALID_PHONETHREE_DS_FAILEDUSER_ABANDONEDMISSING_AMOUNTINVALID_AMOUNTAMOUNT_BELOW_MINIMUMINSUFFICIENT_FUNDSRISK_BLOCKEDBLACKLISTED_BLOCKEDBIN_BLACKLISTEDEXPIRED_CARDDO_NOT_HONORAUTHENTICATION_FAILEDGENERIC_DECLINEDAILY_LIMIT_EXCEEDEDISSUER_DECLINED_NO_INFORESTRICTED_CARDLOST_OR_STOLEN_CARDCARD_LIMIT_EXCEEDEDCANCELLED_BY_BANKDECLINE_LIMIT_EXCEEDEDGATEWAY_UNAVAILABLEGATEWAY_TIMEOUT

Need something that is not covered here? Talk to an integration engineer.