Card Order

Learn how to manage card orders requests

Card order is the two-step process required to issue a new private or business card and retrieve newly generated card data.

Card Order workflow


Card Order

To request for a physical or virtual card, you should submit a DAPI endpoint POST /v1/api/cards/order. If the request is successfully submitted, you will receive orderId in the response, which should be used in Order Status endpoint to retrieve card details once the card order request is completed.

Card order scenarios with required parameters and applicable validations:

Private Cards
Private Base Cards

1. Base Private Card with New Client and New Agreement

OrderCard Base Private [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
privateClient required
object mandatory block for New Base Card
↳ id absent
string should be absent (in order to create new Client)
↳ name,
surname,
mobilePhone required
string mandatory parameters
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount optional
string Can be absent (in order to create new "card.cardAccount") / Can be filled with own value (in order to create new "card.cardAccount" with own id)
↳ currencies required
array mandatory parameter
↳ holder ignored
object parameters will be ignored (holder is a Private Client)
↳ deliveryAddress required
object mandatory block (will be used in Client Agreement)
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "privateClient": {
    "name": "{{ name }}",
    "surname": "{{ surname }}",
    "mobilePhone": "{{ mobilePhone }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "currencies": [
      "EUR"
    ],
    "deliveryAddress": {
      "country": "{{ country }}",
      "city": "{{ city }}",
      "street": "{{ street }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if provided "card.productCode" is not registered;
CardOrder will be rejected if "privateClient.name" OR "privateClient.surname" is not provided;

2. Attached Private Card with New Agreement

OrderCard Base Private [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
privateClient required
object mandatory block for New Base Card
↳ id required
string mandatory parameter, existing ID (in order to use existing Client data)
[other parameters]
Other parameters will be ignored
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount optional
string Can be absent (in order to create new "card.cardAccount") / Can be filled with own value (in order to create new "card.cardAccount" with own id)
↳ currencies required
array mandatory parameter
↳ holder ignored
object parameters will be ignored (holder is a Private Client)
↳ deliveryAddress required
object mandatory block (will be used in Client Agreement)
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "privateClient": {
    "id": "{{ id }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "currencies": [
      "EUR"
    ],
    "deliveryAddress": {
      "country": "{{ country }}",
      "city": "{{ city }}",
      "street": "{{ street }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if provided "privateClient.id" not found;
CardOrder will be rejected if "privateClient.id" is not provided;

3. Attached Private Card with Existing Agreement

OrderCard Base Private [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
privateClient required
object mandatory block for New Base Card
↳ id required
string mandatory parameter, existing ID (in order to use existing Client data)
[other parameters]
Other parameters will be ignored
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount required
string mandatory parameter, existing Account (in order to use existing Client Account)
↳ currencies required
array mandatory parameter
↳ holder ignored
object parameters will be ignored (holder is a Private Client)
↳ deliveryAddress ignored
object parameters will be ignored
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "privateClient": {
    "id": "{{ id }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "cardAccount": "{{ cardAccount }}",
    "currencies": [
      "EUR"
    ],
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if provided "privateClient.id" not found;
CardOrder will be rejected if "privateClient.id" is not provided;
CardOrder will be rejected if provided "card.productCode" does not match the details of the existing agreement;
CardOrder will be rejected if provided "card.currency" does not match the details of the existing "card.cardAccount";
Business Cards
Business Base Cards

1. Base Business Card with New Client and New Agreement

OrderCard Base Business [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card (Company data)
↳ registrationNumber required
string mandatory parameter
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount optional
string Can be absent (in order to create new "card.cardAccount") / Can be filled with own value (in order to create new "card.cardAccount" with own id)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data (Business Cardholder data)
↳ name,
surname,
mobilePhone required
string mandatory parameters
↳ deliveryAddress required
object mandatory block (will be used in Client Agreement)
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "name": "{{ name }}",
      "surname": "{{ surname }}",
      "mobilePhone": "{{ mobilePhone }}"
    },
    "deliveryAddress": {
      "country": "{{ country }}",
      "city": "{{ city }}",
      "street": "{{ street }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if "businessClient.registrationNumber" is not provided in order;
CardOrder will be rejected if provided "card.productCode" is not registered;

2. Additional Business Card with New Client and New Agreement

OrderCard Base Business [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card
↳ registrationNumber required
string mandatory parameter, existing RegNum (in order to create Business Card within the same Company)
[other parameters]
other parameters should match if used
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount optional
string Can be absent (in order to create new "card.cardAccount") / Can be filled with own value (in order to create new "card.cardAccount" with own id)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data (Business Cardholder data)
↳ name,
surname,
mobilePhone required
string mandatory parameters
↳ deliveryAddress required
object mandatory block (will be used in Client Agreement)
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "name": "{{ name }}",
      "surname": "{{ surname }}",
      "mobilePhone": "{{ mobilePhone }}"
    },
    "deliveryAddress": {
      "country": "{{ country }}",
      "city": "{{ city }}",
      "street": "{{ street }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if "businessClient.registrationNumber" is not provided in order;
CardOrder will be rejected if provided "card.productCode" is not registered;
CardOrder will be rejected if provided business client details do not match existing business client;

3. Attached Business Card with New Agreement (existing business client and existing cardholder)

OrderCard Base Business [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card
↳ registrationNumber required
string mandatory parameter, existing RegNum (in order to create Business Card within the same Company)
[other parameters]
Other parameters will be ignored
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount optional
string Can be absent (in order to create new "card.cardAccount") / Can be filled with own value (in order to create new "card.cardAccount" with own id)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data
↳ id required
string mandatory parameter, existing Client ID (in order to use existing Business Cardholder data)
[other parameters]
Other parameters will be ignored
↳ deliveryAddress required
object mandatory block (will be used in Client Agreement)
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "id": "{{ id }}"
    },
    "deliveryAddress": {
      "country": "{{ country }}",
      "city": "{{ city }}",
      "street": "{{ street }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if provided "businessClient.registrationNumber" not found;
CardOrder will be rejected if provided "card.holder.id" not found;
CardOrder will be rejected if "businessClient.registrationNumber" is not provided in order;
CardOrder will be rejected if provided "card.productCode" is not registered;
CardOrder will be rejected if provided registration number does not match the registration number of original Business Client;

4. Attached Business Card with existing Agreement (existing business client and existing cardholder)

OrderCard Base Business [1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card
↳ registrationNumber required
string mandatory parameter, existing RegNum (in order to create Business Card within the same Company)
[other parameters]
Other parameters will be ignored
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount required
string mandatory parameter, existing Account (in order to use existing Client Account)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data
↳ id required
string mandatory parameter, existing Client ID (in order to use existing Business Business Cardholder data)
[other parameters]
Other parameters will be ignored
↳ deliveryAddress ignored
object parameters will be ignored
↳ supplementary required
string FALSE is mandatory for BASE card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "cardAccount": "{{ cardAccount }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "id": "{{ id }}"
    },
    "supplementary": "false"
  }
}
Validations
CardOrder will be rejected if provided registration number, "card.holder.id" or CardAccount could not be found;
CardOrder will be rejected if provided "card.holder.id" does not own the same "businessClient.registrationNumber" as provided in "businessClient" part;
CardOrder will be rejected if provided "card.productCode" or "card.currency" does not match the product or currency of the found agreement;
Business Supplementary Cards

1. Supplementary Business Card with new Holder

OrderCard Supplementary Business[1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card
↳ registrationNumber required
string mandatory parameter, existing ID (in order to create Business Card within the same Company)
[other parameters]
other parameters should match if used
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount required
string mandatory parameter, existing Account (in order to use existing Client Account)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data (Business Cardholder data)
↳ name,
surname,
mobilePhone required
string mandatory parameters
↳ deliveryAddress ignored
object parameters will be ignored
↳ supplementary required
string True is mandatory for Supplementary card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "cardAccount": "{{ cardAccount }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "name": "{{ name }}",
      "surname": "{{ surname }}",
      "mobilePhone": "{{ mobilePhone }}"
    },
    "supplementary": "true"
  }
}
Validations
CardOrder will be rejected if provided "card.productCode" does not match the product of the found agreement;
CardOrder will be rejected if provided "card.currency" does not match the details of the existing card account;
CardOrder will be rejected if provided "businessClient.registrationNumber" or "card.cardAccount" could not be found;
CardOrder will be rejected if provided "businessClient.registrationNumber" or "card.cardAccount" do not match requested ones;

2. Supplementary Business Card with existing Holder

OrderCard Supplementary Business[1.3]

Request Body Schema (application/json)
externalId optional
string optional parameter
businessClient required
object mandatory block for Business Card
↳ registrationNumber required
string mandatory parameter, existing RegNum (in order to create Business Card within the same Company) (Reg.num should match initial client, base Business Card owner and Supplementary Client owner)
[other parameters]
Other parameters will be ignored
card required
object mandatory block
↳ productCode required
string mandatory parameter
↳ cardAccount required
string mandatory parameter, existing Account (in order to use existing Client Account) (Account should be used from another client, planned to be used as Supplementary card owner)
↳ currencies required
array mandatory parameter
↳ holder required
object mandatory block should contain Client data
↳ id required
string mandatory parameter, existing Client ID (in order to use existing Business Cardholder data) (Holder.id should be used from initial client, base Card owner)
[other parameters]
Other parameters will be ignored
↳ deliveryAddress ignored
object parameters will be ignored
↳ supplementary required
string True is mandatory for Supplementary card
Request Sample
{
  "businessClient": {
    "registrationNumber": "{{ registrationNumber }}"
  },
  "card": {
    "productCode": "{{ productCode }}",
    "cardAccount": "{{ cardAccount }}",
    "currencies": [
      "EUR"
    ],
    "holder": {
      "id": "{{ id }}"
    },
    "supplementary": "true"
  }
}
Validations
CardOrder will be rejected if provided "businessClient.registrationNumber" does not match the "businessClient.registrationNumber" assigned to the holder;
CardOrder will be rejected if provided "card.currency" does not match the details of the existing "card.cardAccount";
CardOrder will be rejected if provided "card.holder.id" or "card.cardAccount" could not be found;
CardOrder will be rejected if provided "card.cardAccount" do not match requested "card.holder.id";

Card Order Status

Once you have created a new card order, you will be able to follow up on the order status via GET /v1/api/orders. This request returns a list of your card orders. The card orders are sorted in descending order by created date - the most recently created object appearing first. To receive a list of orders starting with a particular order, provide either its id or external id number.

Order status values

Here is the list of orders status values and their description:

  • Registered – a card order is registered in the system and awaiting the launch of the manual card issue process
  • Processing – a card order is registered and is awaiting for manual processing
  • Duplicated found – a card order is registered but duplicate orders have been identified
  • External check failed – an external person validity check has failed
  • Completed – a card order is registered and completed
  • Rejected – a card order is registered but issuing has failed

Order gift cards

If you want to order cards with identical parameters in bulk, you can use the POST /v1/api/cards/order-gift-card endpoint. This request allows users to order up to 10,000 cards in a single request. Cards will be created using Base Private Card with New Client and New Agreement scenario. To avoid additional overload, please use this endpoint in conjunction with a webhook and refrain from using looped order status checks since the completion of ordered cards in bulk can take some time. This endpoint requires additional access rights.

How to set up?
  1. Contact your DECTA manager about access to this endpoint.
  2. Create a web service to get webhook data and send the endpoint data to your DECTA manager.
  3. Start using the gift card order endpoint once DECTA has notified you about it.
How to use?
  1. Send request to POST /v1/api/cards/order-gift-card.
  2. Get response with OrderId value.
  3. Wait for webhook with end result.
  4. Use GET /v1/api/orders to get card data.

Webhook callback overview

The webhook notifies the Customer about completion of the gift card order processing to refrain the Customer from using looped order status checks via API. The Customer should create an endpoint on their side that can process incoming requests and send a 200 HTTP code in response. The web service should be ready to receive HTTP POST calls with a payload in JSON format. If the web service uses basic authentication, the credentials should be provided to DECTA for configuration. Each call represents a separate event message received. If the Customer’s designated URL is not available or DECTA receives an HTTP error, then DECTA will continue to resend the webhook every 20 seconds for 24 hours.

Payload example:

{
  "endpoint":"GIFT_CARD_ORDER",
  "requestId": "11a11b1c-1d11-11ef-1g11-h1fi1jk11l11",
  "data":[
    {
      "orderId": "f85e63a7-a858-4fa7-afaf-dc7e5f29g9e8",
      "externalId": "GIFT_ORDER-9999999"
    }
  ]
}
Field Data type Description
endpoint string Endpoint short name.
requestId string Request ID from initial request.
data.orderId string The order identification number is a unique identifier assigned to each order. It helps track and manage the order throughout its processing stages.
data.externalId string The user-preferred ID, which was passed in the order request, allows users to send their own identifier.