Overview

Mondido understands the need to incorporate best business practices in security. That's why we've made it easy for merchants to implement 3D Secure or “3 Domain Secure” as the industry standard identity check solution to minimize chargebacks from fraudulent credit cards, all included in our simple pricing. 3D-Secure refers to second authentication factor products such as Verified by Visa, MastercardⓇSecureCode™, American Express SafekeyⓇ, and JCB J/Secure™.

NOTE: While you can create your own payment experience, We strongly recommend using our Hosted Window or Mondido.js solution to save time in implementing 3D-Secure and client side encryption to your checkout procedure.

Avoid API Card Payments!

In order to process card payments either by storing or transfer without storing, you would need full PCI DSS compliance. This is not something you would like to do. Even if you can do card payments through the API, in most cases you should not do it.

Please make use of the stored cards functionality to facilitate API based card payments.

Authentication

Mondido API calls are made via our REST endpoints and the user is identified using Basic Auth. The user name is your merchant ID and password can be set in the admin console: https://mondido.com/en/settings

Partial data

While doing API calls you can use pagination to fetch parts of your data using limit, offset and start_id.

Pagination Example:

https://api.mondido.com/v1/transactions?limit=2&offset=20

ID range Example:

https://api.mondido.com/v1/transactions?start_id=1051&limit=15

Pagination information

Pagination of partial data can be achieved using the Content-Range header. The Content-Range show what part of the data-set that is being returned.

Content-Range:items 16-20/173

Order

You can order your resource list by using the order_by query parameter.

Order example

https://api.mondido.com/v1/transactions?order_by=amount

Descending order example

https://api.mondido.com/v1/transactions?order_by=amount:desc

Filter

If you know what you are looking for, you can filter your result with the filter query parameter.

Strings and Booleans support equal and wildcard matches, e.g.:

  • filter[status]=approved
  • filter[card_number]=411*
  • filter[test]=true

Integers, Decimals and Dates supports equal matches, as well as up to, from, and ranges, e.g.:

  • filter[amount]=..1000 will fetch resources where amount is less than or equal to 1000
  • filter[amount]=100.. will fetch resources where amount is greater than or equal to 100
  • filter[created_at]=20150101..20150131 will fetch resources created in January 2015 (from the first up until the 31st)
  • filter[created_at]=20150930T084821 will fetch resources with exact date and time value

Metadata filters

  • filter[metadata.customer.name]=robert will fetch resources where metadata contains a customer which have a name that is robert
  • filter[metadata.customer]=* will fetch resources where metadata have a customer object
  • filter[metadata.products.0.name]=* will fetch the first resources from the products array

Filter example:

https://api.mondido.com/v1/transactions?filter[test]=false&filter[amount]100..&filter[created_at]=20140101..20141231

HTTP Response Codes

The HTTP answer of a successful call is always HTTP 200 and contains the same JSON as with a GET call. A bad call will return HTTP 40x with a JSON error response.

Object Graph

In many cases the response does not contain full object graph but just a simple object like .."customer":{"id":1}..
In this case you can extend the object using Extendability.

Language

The API supports responses in Swedish and English so if you specify locale=sv or locale=en either as a parameter that you send in or int the query you will receive error messages in the desired language.

Transaction

A transaction is a function to make payments using cards though the REST API. This is done using javaScript (mondido.js) or a server to server implementation. A merchant is identified using Basic Auth and can do GET calls to fetch one or many transactions, or POST to create a transaction (a purchase).

A transaction contains JSON with the following data:
id integer

Id of the transaction

created_at datetime

Ex. 2014-04-25T10:20:48Z (UTC)

merchant_id string

ID of merchant

amount decimal

The transaction amount ex. 12.00

vat_amount decimal

The vat amount for the transaction ex. 3.00

payment_ref string

The merchant order/payment ID

card_holder string

The name on the charged credit card

card_number string

A masked card number ex. 411111****1111

card_expiry string

MMYY ex. 0120

test boolean

Whether the transaction is a test transaction.

currency string

The currency (SEK, CAD, CNY, COP, CZK, DKK, HKD, HUF, ISK, INR, ILS, JPY, KES, KRW, KWD, LVL, MYR, MXN, MAD, OMR, NZD, NOK, PAB, QAR, RUB, SAR, SGD, ZAR, CHF, THB, TTD, AED, GBP, USD, TWD, VEF, RON, TRY, EUR, UAH, PLN, BRL)

status string

Status of the api transaction.

  • pending – created but not yet processed
  • approved
  • authorized
  • declined
  • failed

card_type string

VISA, MASTERCARD, etc. (STORED_CARD if the transaction is done with stored card)

payment_request object

The payment request from the merchant

template_id int

Hosted Page template ID

error object

For example:

error: {
   name: 'errors.card_number.missing',
   code: 118,
   description: 'Card number is missing'
 }

cost object

The cost of transaction

{"percentual_fee":0,"fixed_fee":0,"percentual_exchange_fee":0,"total":"0.0", "vat_rate": 0.25}

success_url string

URL after successful transaction

error_url string

URL after unsuccessful transaction

metadata object

Merchant specific Metadata

refund array

An array with refunds objects where the token value is used for making transactions with the stored card

stored_card object

If the transaction has a stored card connected it will have a token value that is used for making transactions with the stored card

customer object

Customer that owns the transaction

transaction_type string

credit_card/stored_card/recurring

subscription object

The connected subscription

webhooks array

A list of Webhooks related to the transaction

href string

A HTTP link to a payment page where the customer can finish a payment. Ex. https://pay.mondido.com/v1/form/hrr5sEwz0y-XgcYOyNXhew

Items Array of items objects * required if payment_method is invoice

items

payment_details object

payment_details

payment_method string

Can be any of the following: credit_card, recurring, stored, invoice, swish, paypal, bank

Show Transaction

To show a transaction you need to do a GET to https://api.mondido.com/v1/transactions/3 that will returns a transaction with ID 3.

Copy
EXAMPLE REQUEST

curl --user 3:password https://api.mondido.com/v1/transactions/443

EXAMPLE RESPONSE

{
  "amount" : "480.0",
  "card_holder" : "Annika Manns",
  "card_number" : "*****************1111",
  "card_type" : "VISA",
  "cost" : { "fixed_fee" : 0,
    "percentual_exchange_fee" : 0,
    "percentual_fee" : 0,
    "total" : "0.0"
  },
  "created_at" : "2013-12-17T13:41:07Z",
  "currency" : "SEK",
  "customer" : null,
  "error" : null,
  "error_url" : "https://mondido.com/payment-error",
  "id" : 443,
  "merchant_id" : 3,
  "metadata" : {
    "products" : [ "awesomeness","coolness"],
    "user" : { "email" : "justmyemail@mondido.com"}
  },
  "payment_ref" : null,
  "ref" : null,
  "refunds" : [  ],
  "status" : "approved",
  "stored_card" : null,
  "subscription" : null,
  "success_url" : "https://mondido.com/payment-ok?status=A",
  "template_id" : 10,
  "test" : false,
  "transaction_type" : null,
  "webhooks" : [  ]
}
EXAMPLE REQUEST

transaction = Mondido::CreditCard::Transaction.get(8176)

EXAMPLE RESPONSE

<Mondido::CreditCard::Transaction:0x007f98d4a74738
  @amount="725.0",
  @currency="sek",
  @payment_ref="order-1146",
  @card_holder="Test User",
  @card_number="411111******1111",
  @card_expiry="1016",
  @card_cvv="200",
  @card_type="VISA",
  @customer_ref="user_25",
  @metadata={"products"=>[{"title"=>"T-shirt"}, {"title"=>"Shoes"}]},
  @validation_context=nil,
  @hash="7234484a4ca9ea19f594b7fda7268562",
  @id=8176,
  @created_at="2014-08-07T13:38:37Z",
  @merchant_id=10,
  @test=false,
  @status="approved",
  @transaction_type="credit_card",
  @cost={"percentual_fee"=>"0.025", "fixed_fee"=>"2.5", "percentual_exchange_fee"=>"0.035", "total"=>"46.0"},
  @stored_card=nil,
  @customer={"id"=>3052},
  @subscription=nil>

EXAMPLE REQUEST

$transaction = mondido\api\transaction::get(443);

EXAMPLE RESPONSE

Array
(
[id] => 443
[created_at] => 2013-12-17T13:41:07Z
[merchant_id] => 3
[amount] => 480.0
[payment_ref] =>
  [ref] =>
  [card_holder] => Annika Manns
[card_number] => *****************1111
[test] =>
  [metadata] => Array
(
[user] => Array
(
[email] => justmyemail@mondido.com
)

[products] => Array
(
[0] => awesomeness
[1] => coolness
)

)

[currency] => SEK
[status] => approved
[card_type] => VISA
[transaction_type] =>
  [template_id] => 10
[error] =>
  [cost] => Array
(
[percentual_fee] => 0
[fixed_fee] => 0
[percentual_exchange_fee] => 0
[total] => 0.0
)

[success_url] => https://mondido.com/payment-ok?status=A
[error_url] => https://mondido.com/payment-error
[stored_card] =>
  [customer] =>
  [subscription] =>
  [refunds] => Array
(
)

[webhooks] => Array
(
)

)
EXAMPLE REQUEST

var transaction = Transaction.Get(1);

EXAMPLE RESPONSE

{
  "amount" : "10.00",
  "card_cvv" : "200",
  "card_holder" : ".net sdk",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "cost" : {
    "fixed_fee" : "2.5",
    "percentual_exchange_fee" : "0.035",
    "percentual_fee" : "0.025",
    "total" : "2.8"
  },
  "created_at" : "2014-08-06T17:30:15.1923829Z",
  "currency" : "eur",
  "customer" : null,
  "encrypted" : null,
  "error" : null,
  "error_url" : null,
  "id" : 1,
  "merchant_id" : 0,
  "metadata" : null,
  "payment_ref" : "123",
  "payment_request" : null,
  "refund" : null,
  "status" : "complete",
  "stored_card" : null,
  "subscription" : null,
  "success_url" : null,
  "template_id" : 1,
  "test" : true,
  "transcation_type" : null,
  "webhooks" : null
}

List Transactions

To list transactions you need to do a GET to https://api.mondido.com/v1/transactions that will return a list of your transactions. The default limit is 10.

To get transactions for a specific customer: GET to: https://api.mondido.com/v1/customers/3/transactions

To get transactions for a specific subscription: GET to: https://api.mondido.com/v1/subscription/3/transactions

Transactions support filters on: amount, card_holder, card_number, card_type, created_at, currency, customer_id, error_url, href_token, id, payment_ref, status, stored_card_id, subscription_id, success_url, template_id, test, transaction_type and updated_at.

Copy
EXAMPLE REQUEST

curl -X GET --user 3:custom00 'https://api.mondido.com/v1/transactions?limit=2&offset=1'

EXAMPLE RESPONSE

[
  {
    "amount" : "1.0",
    "card_holder" : "robrt pohl",
    "card_number" : "411111******1111",
    "card_type" : "VISA",
    "cost" : {
      "fixed_fee" : "2.5",
      "percentual_exchange_fee" : "0.035",
      "percentual_fee" : "0.025",
      "total" : "2.56"
    },
    "created_at" : "2014-07-22T16:42:10Z",
    "currency" : "eur",
    "customer" : null,
    "error" : null,
    "error_url" : null,
    "id" : 6643,
    "merchant_id" : 3,
    "metadata" : {
      "products" : [ {
        "id" : "1",
        "name" : "Nice Shoe",
        "price" : "1.00",
        "qty" : "1",
        "url" : "http://mysite.com/product/1"
      } ],
      "user" : { "email" : "jd@email.com" }
    },
    "payment_ref" : "1785",
    "ref" : null,
    "refunds" : [  ],
    "status" : "approved",
    "stored_card" : null,
    "subscription" : null,
    "success_url" : null,
    "template_id" : null,
    "test" : true,
    "transaction_type" : "credit_card",
    "webhooks" : [ {
      "created_at" : "2014-07-22T16:42:10Z",
      "data_format" : null,
      "email" : "info@mondido.com",
      "http_method" : null,
      "id" : 18031,
      "response" : null,
      "trigger" : "payment",
      "type" : "Email",
      "url" : null
    } ]
  },
  {...}
]
# EXAMPLE REQUEST

transactions = Mondido::CreditCard::Transaction.all(limit: 2, offset: 4)


# EXAMPLE RESPONSE

[
  <Mondido::CreditCard::Transaction:0x007fae8d306428
    @id=8171,
    @created_at="2014-08-07T13:32:21Z",
    @merchant_id=10,
    @amount="725.0",
    @payment_ref="order_106",
    @card_holder="Test User",
    @card_number="411111******1111",
    @test=false,
    @metadata={"products"=>[{"title"=>"T-shirt"}, {"title"=>"Shoes"}]},
    @currency="sek",
    @status="approved",
    @card_type="VISA",
    @transaction_type="credit_card",
    @cost={"percentual_fee"=>"0.025", "fixed_fee"=>"2.5", "percentual_exchange_fee"=>"0.035", "total"=>"46.0"},
    @stored_card=nil,
    @customer={"id"=>3052},
    @subscription=nil>,
  <Mondido::CreditCard::Transaction:0x007fae8d33b7b8
    @id=8163,
    @created_at="2014-08-07T13:14:36Z",
    @merchant_id=10,
    @amount="725.0",
    @payment_ref="order_105",
    @card_holder="Test User",
    @card_number="411111******1111",
    @test=false,
    @metadata={"products"=>[{"title"=>"T-shirt"}, {"title"=>"Shoes"}]},
    @currency="sek",
    @status="approved",
    @card_type="VISA",
    @transaction_type="credit_card",
    @cost={"percentual_fee"=>"0.025", "fixed_fee"=>"2.5", "percentual_exchange_fee"=>"0.035", "total"=>"46.0"},
    @stored_card=nil,
    @customer={"id"=>3052},
    @subscription=nil>
]
EXAMPLE REQUEST

$transaction = mondido\api\transaction::index(10,0);

EXAMPLE RESPONSE

Array
(
  [0] => Array
  (
    [id] => 7541
    [created_at] => 2014-08-04T19:54:43Z
    [merchant_id] => 3
    [amount] => 10.0
    [payment_ref] => 56203
    [ref] =>
    [card_holder] => php sdk
    [card_number] => 411111******1111
    [test] => 1
    [metadata] =>
    [currency] => eur
    [status] => approved
    [card_type] => VISA
    [transaction_type] => credit_card
    [template_id] =>
    [error] =>
    [cost] => Array
    (
      [percentual_fee] => 0.025
      [fixed_fee] => 2.5
      [percentual_exchange_fee] => 0.035
      [total] => 3.1
    )

    [success_url] =>
    [error_url] =>
    [stored_card] =>
    [customer] =>
    [subscription] =>
    [refunds] => Array
    (
    )

    [webhooks] => Array
    (
    )
  )
)
...
EXAMPLE REQUEST

var transactions = Transaction.List(3,0);

EXAMPLE RESPONSE

[
  {
    "amount" : "10.00",
    "card_cvv" : "200",
    "card_holder" : ".net sdk",
    "card_number" : "411111******1111",
    "card_type" : "VISA",
    "cost" : {
      "fixed_fee" : "2.5",
      "percentual_exchange_fee" : "0.035",
      "percentual_fee" : "0.025",
      "total" : "2.8"
    },
    "created_at" : "2014-08-06T17:39:47.2978516Z",
    "currency" : "eur",
    "customer" : null,
    "encrypted" : null,
    "error" : null,
    "error_url" : null,
    "id" : 1,
    "merchant_id" : 0,
    "metadata" : null,
    "payment_ref" : "123",
    "payment_request" : null,
    "refund" : null,
    "status" : "complete",
    "stored_card" : null,
    "subscription" : null,
    "success_url" : null,
    "template_id" : 1,
    "test" : true,
    "transcation_type" : null,
    "webhooks" : null
  }...
]

Create Transaction

To create a transaction you need to do a POST to https://api.mondido.com/v1/transactions that will return a the newly created transaction in the same way as doing a GET.

Each param can be encrypted with the public RSA key for better security and lower PCI DSS requirements for the merchant. The parameter "encrypted" must also be sent and contain the names of the encrypted parameters such as "card_number,card_cvv,card_holder,card_expiry,card_type". You would also need to base64 encode the string both before and after encryption, i.e. base64_encode( encrypt( base64_encode( actual_value ) ) ).

For transactions with a stored card, the value "card_number" must be the token that the merchant got in the store-response and the "card_type" must be "STORED_CARD". So instead of a card number use the token and instead of "VISA" use "STORED_CARD".

The params you can send to create a transaction:
merchant_id string* required

The ID of the merchant

amount decimal* required

The transaction amount ex. 12.00

vat_amount decimal

The vat amount for the transaction ex. 3.00

payment_ref string* required

Merchant order/payment ID

card_holder string

The name on the charged credit card. Not required if process = false.

card_cvv string

CVV code. Not required if process = false.

card_expiry string

Expiration date of the credit card in the format MMYY. Not required if process = false.

card_number string

The card number. Not required if process = false.

test boolean

Whether the transaction is a test transaction. Defaults false

metadata object

Merchant custom Metadata

currency string* required

The currency (SEK, CAD, CNY, COP, CZK, DKK, HKD, HUF, ISK, INR, ILS, JPY, KES, KRW, KWD, LVL, MYR, MXN, MAD, OMR, NZD, NOK, PAB, QAR, RUB, SAR, SGD, ZAR, CHF, THB, TTD, AED, GBP, USD, TWD, VEF, RON, TRY, EUR, UAH, PLN, BRL)

card_type string

VISA, MASTERCARD, STORED_CARD (if the transaction is done using a stored card), etc

store_card boolean

true/false if you want to store the card

plan_id int

The ID of the subscription plan.

customer_ref string

The merchant specific user/customer ID

hash
Loading...
webhook object

You can specify a custom Webhook for a transaction. For example sending e-mail or POST to your backend.

encrypted string

A comma separated string containing the params you have encrypted. Ex: "card_number,card_holder,card_cvv"

process boolean

Should be false if you want to process the payment at a later stage. You will not need to send in card data (card_number, card_cvv, card_holder, card_expiry) in this case.

success_url string* required

A URL to the page where the user is redirected after a successful transaction.

error_url string * required

A URL to the page where the user is redirected after a unsuccessful transaction.

authorize boolean

authorize = true, means that the transaction should be reserved (Authorized).

Items Array of items objects * required if payment_method is invoice

items

payment_details object * required if payment_method is invoice

payment_details

payment_method string * required if payment_method is invoice

Can be any of the following: credit_card, recurring, stored, invoice, swish, paypal, bank

* Important when storing a card/subscribing to a plan

In some cases the card can not be stored, but we will still try to charge it. This means that the transaction might be successful even though the card can not be stored.

Always check the response to see if there is a stored_card (or subscription), which will be missing if the card could not be stored.

Copy
EXAMPLE REQUEST

curl -X POST --data "card_number=4111111111111111&card_expiry=0116&card_holder=name%20name&card_type=VISA&amount=5.00&payment_ref=53dfaa67&card_cvv=200&currency=sek&hash=6bd88f621553edcf0c553f91bf6fb797&test=true" --user 3:password 'https://api.mondido.com/v1/transactions'


EXAMPLE RESPONSE

{
  "amount" : "5.0",
  "card_holder" : "name name",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "cost" : {
    "fixed_fee" : "2.5",
    "percentual_exchange_fee" : "0.035",
    "percentual_fee" : "0.025",
    "total" : "2.8"
  },
  "created_at" : "2014-08-04T15:45:11Z",
  "currency" : "sek",
  "customer" : null,
  "error" : null,
  "error_url" : null,
  "id" : 7510,
  "merchant_id" : 3,
  "metadata" : null,
  "payment_ref" : "53dfaa67",
  "ref" : null,
  "refunds" : [  ],
  "status" : "approved",
  "stored_card" : null,
  "subscription" : null,
  "success_url" : null,
  "template_id" : null,
  "test" : true,
  "transaction_type" : "credit_card",
  "webhooks" : [  ]
}
# EXAMPLE REQUEST

attributes = {
  amount: '725.00',
  currency: 'sek',
  payment_ref: 'order-1146',
  card_holder: 'Test User',
  card_number: '4111 1111 1111 1111',
  card_expiry: '1016',
  card_cvv: '200',
  card_type: 'VISA',
  customer_ref: 'user_25',
  metadata: {
    products: [
      {title: 'T-shirt'},
      {title: 'Shoes'}
    ]i
  }
}

transaction = Mondido::CreditCard::Transaction.create(attributes)

# EXAMPLE RESPONSE

<Mondido::CreditCard::Transaction:0x007f98d4a74738
  @amount="725.0",
  @currency="sek",
  @payment_ref="order-1146",
  @card_holder="Test User",
  @card_number="411111******1111",
  @card_expiry="1016",
  @card_cvv="200",
  @card_type="VISA",
  @customer_ref="user_25",
  @metadata={"products"=>[{"title"=>"T-shirt"}, {"title"=>"Shoes"}]},
  @validation_context=nil,
  @hash="7234484a4ca9ea19f594b7fda7268562",
  @id=8176,
  @created_at="2014-08-07T13:38:37Z",
  @merchant_id=10,
  @test=false,
  @status="approved",
  @transaction_type="credit_card",
  @cost={"percentual_fee"=>"0.025", "fixed_fee"=>"2.5", "percentual_exchange_fee"=>"0.035", "total"=>"46.0"},
  @stored_card=nil,
  @customer={"id"=>3052},
  @subscription=ni>l
EXAMPLE REQUEST

$payment = array(
  "card_number" => "4111111111111111",
  "card_holder" => "php sdk",
  "card_expiry" => "0116",
  "card_cvv" => "200",
  "card_type" => "VISA",
  "amount" => "10.00",
  "payment_ref" => $ref,
  "currency" => "eur",
  "test" => "true",
  "hash" => md5(configuration::$app_settings['username'].$ref."10.00".configuration::$app_settings['secret'])
);

$transaction = mondido\api\transaction::create($payment);

EXAMPLE RESPONSE

Array
(
  [id] => 7543
  [created_at] => 2014-08-04T20:02:32Z
  [merchant_id] => 3
  [amount] => 10.0
  [payment_ref] => 99485
  [ref] =>
  [card_holder] => php sdk
  [card_number] => 411111******1111
  [test] => 1
  [metadata] =>
  [currency] => eur
  [status] => approved
  [card_type] => VISA
  [transaction_type] => credit_card
  [template_id] =>
  [error] =>
  [cost] => Array
  (
    [percentual_fee] => 0.025
    [fixed_fee] => 2.5
    [percentual_exchange_fee] => 0.035
    [total] => 3.1
  )

  [success_url] =>
  [error_url] =>
  [stored_card] =>
  [customer] =>
  [subscription] =>
  [refunds] => Array
  (
  )

  [webhooks] => Array
  (
  )

)
EXAMPLE REQUEST

var payment_ref = DateTimeOffset.Now.Ticks.ToString();
var postData = new List>();
var encryptedCard = "4111111111111111".RSAEncrypt();

postData.Add(new KeyValuePair("amount", "10.00"));
postData.Add(new KeyValuePair("payment_ref", payment_ref));
postData.Add(new KeyValuePair("card_expiry", "0116"));
postData.Add(new KeyValuePair("card_holder", ".net sdk"));
postData.Add(new KeyValuePair("test", "true"));
postData.Add(new KeyValuePair("card_cvv", "200"));
postData.Add(new KeyValuePair("card_number", encryptedCard));
postData.Add(new KeyValuePair("card_type", "VISA"));
postData.Add(new KeyValuePair("currency", "sek"));
postData.Add(new KeyValuePair("locale", "en"));
postData.Add(new KeyValuePair("hash", (Settings.ApiUsername + payment_ref + "10.00" + "sek" + Settings.ApiSecret).ToMD5()));
postData.Add(new KeyValuePair("encrypted", "card_number"));

var transaction = Transaction.Create(postData);

EXAMPLE RESPONSE

{
  "amount" : "10.00",
  "card_cvv" : "200",
  "card_holder" : ".net sdk",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "cost" : {
    "fixed_fee" : "2.5",
    "percentual_exchange_fee" : "0.035",
    "percentual_fee" : "0.025",
    "total" : "2.8"
  },
  "created_at" : "2014-08-06T17:41:50.8261719Z",
  "currency" : "sek",
  "customer" : null,
  "encrypted" : "card_number",
  "error" : null,
  "error_url" : null,
  "id" : 1,
  "merchant_id" : 3,
  "metadata" : null,
  "payment_ref" : "635429509106230469",
  "payment_request" : null,
  "refund" : null,
  "status" : "complete",
  "stored_card" : null,
  "subscription" : null,
  "success_url" : null,
  "template_id" : 1,
  "test" : true,
  "transcation_type" : null,
  "webhooks" : null
}

Create a Transaction with a stored card

In a Stored Card payment you need to have the token as card_number and STORED_CARD as card_type. The response will have a Stored Card object with the ID of the card used.

Copy
EXAMPLE REQUEST

curl -X POST --data "card_number=31407340575815445&card_type=STORED_CARD&amount=5.00&payment_ref=53e479ea&card_cvv=000&currency=sek&hash=e914a186f79333a9f4166b17c6dc791d&test=true" --user 3:password 'https://api.mondido.com/v1/transactions'

EXAMPLE RESPONSE

{
  "amount" : "5.0",
  "card_holder" : "635429445753750000",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "cost" : {
    "fixed_fee" : "2.5",
    "percentual_exchange_fee" : "0.035",
    "percentual_fee" : "0.025",
    "total" : "2.8"
  },
  "created_at" : "2014-08-08T07:20:01Z",
  "currency" : "sek",
  "customer" : { "id" : 3026 },
  "error" : null,
  "error_url" : null,
  "id" : 8237,
  "merchant_id" : 3,
  "metadata" : null,
  "payment_ref" : "53e479ea",
  "ref" : null,
  "refunds" : [  ],
  "status" : "approved",
  "stored_card" : { "id" : 1055 },
  "subscription" : null,
  "success_url" : null,
  "template_id" : null,
  "test" : true,
  "transaction_type" : "stored_card",
  "webhooks" : [  ]
}
file not found
EXAMPLE REQUEST

$payment = array(
"card_number" => "31407340575815445",
"card_cvv" => "000",
"card_type" => "STORED_CARD",
"amount" => "10.00",
"payment_ref" => "123",
"currency" => "eur",
"test" => "true",
"hash" => md5(configuration::$app_settings['username'].$ref."10.00".configuration::$app_settings['secret'])
);

$transaction = mondido\api\transaction::create($payment);

EXAMPLE RESPONSE

Array
(
  [id] => 7543
  [created_at] => 2014-08-04T20:02:32Z
  [merchant_id] => 3
  [amount] => 10.0
  [payment_ref] => 99485
  [ref] =>
  [card_holder] => php sdk
  [card_number] => 411111******1111
  [test] => 1
  [metadata] =>
  [currency] => eur
  [status] => approved
  [card_type] => VISA
  [transaction_type] => credit_card
  [template_id] =>
  [error] =>
  [cost] => Array
  (
    [percentual_fee] => 0.025
    [fixed_fee] => 2.5
    [percentual_exchange_fee] => 0.035
    [total] => 3.1
  )

  [success_url] =>
  [error_url] =>
  [stored_card] =>
  (
    [id] => 1055
  )
  [customer] =>
  [subscription] =>
  [refunds] => Array
  (
  )

  [webhooks] => Array
  (
  )

)
EXAMPLE REQUEST

var payment_ref = DateTimeOffset.Now.Ticks.ToString();
var postData = new List>();

postData.Add(new KeyValuePair("amount", "10.00"));
postData.Add(new KeyValuePair("payment_ref", payment_ref));
postData.Add(new KeyValuePair("test", "true"));
postData.Add(new KeyValuePair("card_cvv", "000"));
postData.Add(new KeyValuePair("card_number", "31407340575815445"));
postData.Add(new KeyValuePair("card_type", "STORED_CARD"));
postData.Add(new KeyValuePair("currency", "sek"));
postData.Add(new KeyValuePair("locale", "en"));
postData.Add(new KeyValuePair("hash", (Settings.ApiUsername + payment_ref + "10.00" + "sek" + Settings.ApiSecret).ToMD5()));

var transaction = Transaction.Create(postData);

EXAMPLE RESPONSE

{
  "amount" : "5.0",
  "card_holder" : "635429445753750000",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "cost" : {
    "fixed_fee" : "2.5",
    "percentual_exchange_fee" : "0.035",
    "percentual_fee" : "0.025",
    "total" : "2.8"
  },
  "created_at" : "2014-08-08T07:20:01Z",
  "currency" : "sek",
  "customer" : { "id" : 3026 },
  "error" : null,
  "error_url" : null,
  "id" : 8237,
  "merchant_id" : 3,
  "metadata" : null,
  "payment_ref" : "53e479ea",
  "ref" : null,
  "refunds" : [  ],
  "status" : "approved",
  "stored_card" : { "id" : 1055 },
  "subscription" : null,
  "success_url" : null,
  "template_id" : null,
  "test" : true,
  "transaction_type" : "stored_card",
  "webhooks" : [  ]
}

Update Transaction

To update a transaction with card details using the API, you need to PUT data to https://api.mondido.com/v1/transactions/1

You can update a transaction when it has previously been created and is not in approved status. For example, you can create a transaction and send in process = false to prepare but not process the actual payment. The next step would be to either pass the href link to the customer to proceed the payment in a hosted window, or to make an API payment using this update call.

The params you can send to update a transaction:
card_holder string

The name on the charged credit card

card_number string

A card number ex. 41111111111111

card_cvv string

CVV code

card_expiry string

Expiration date of the credit card in the format MMYY

currency string

The currency (SEK, CAD, CNY, COP, CZK, DKK, HKD, HUF, ISK, INR, ILS, JPY, KES, KRW, KWD, LVL, MYR, MXN, MAD, OMR, NZD, NOK, PAB, QAR, RUB, SAR, SGD, ZAR, CHF, THB, TTD, AED, GBP, USD, TWD, VEF, RON, TRY, EUR, UAH, PLN, BRL)

card_type string

VISA, MASTERCARD, STORED_CARD (if the transaction is done using a stored card), etc

encrypted string

A comma separated string for the params that you send encrypted. Ex. "card_number,card_cvv"

items Array of items objects

items

metadata object

Metadata

amount decimal

The transaction amount ex. 12.00

vat_amount decimal

The VAT amount for the transaction ex. 3.00

customer_ref string

The merchant specific user/customer ID

hash string

Loading...

process boolean

Should be false if you want to process the payment at a later stage. You will not need to send in card data (card_number, card_cvv, card_holder, card_expiry) in this case.

You can update the Metadata property of an already processed transaction by passing metadata and process = false.

Capture Transaction

To capture an previously authorized transaction, you need to PUT data to https://api.mondido.com/v1/transactions/1/capture

You can capture a transaction when it has previously been authorized. Authorization is achieved by passing authorize = true when creating a transaction using the API, Hosted Window or Mondido.js

The params you can send to capture an authorized transaction:
amount decimal* required

The transaction amount ex. 12.00. Can be lower that the authorized original amount.

Stored Card

To store a card though the API (also called tokenization) you need to POST data to https://api.mondido.com/v1/stored_card. When a card is stored you can use the provided token and make a token based transaction for that stored card. Token based payments use the token as card number and "STORED_CARD" instead of card type (ex. VISA).

id int

The ID of the stored card

created_at datetime

Created date (UTC)

token string

The unique ID that can be used to make transactions

card_number string

The masked version of the credit card number.

currency string

The currency code

expires datetime

Ex. 2014-05-31T23:59:59Z (UTC)

merchant_id int

The merchant ID

customer object

Customer that owns the stored card

Show Stored Card

By doing a GET request to https://api.mondido.com/v1/stored_cards/1 you will get the stored card with ID 1.

Copy
EXAMPLE REQUEST

curl --user 3:password https://api.mondido.com/v1/stored_cards/954

EXAMPLE RESPONSE

{
  "card_holder" : "name name",
  "card_number" : "411111******1111",
  "created_at" : "2014-08-04T17:23:05Z",
  "currency" : "SEK",
  "customer" : { "id" : 2923 },
  "expires" : "2016-01-31T23:59:59Z",
  "id" : 954,
  "merchant_id" : 3,
  "ref" : null,
  "status" : "active",
  "test" : true,
  "token" : "31407172985450590"
}
# EXAMPLE REQUEST

stored_card = Mondido::CreditCard::StoredCard.get(1076)

# RESPONSE EXAMPLE

<Mondido::CreditCard::StoredCard:0x007fe90d6a6960
  @card_holder="Jane Doe",
  @card_number="411111******1111",
  @currency="SEK",
  @id=1076,
  @created_at="2014-08-08T07:31:45Z",
  @status="active",
  @merchant_id=10,
  @test=false,
  @customer={"id"=>3073}>
EXAMPLE REQUEST

$stored_card = mondido\api\stored_card::get(1);

EXAMPLE RESPONSE

Array
(
  [id] => 1
  [created_at] => 2014-08-05T08:17:50Z
  [token] => 31407226670131682
  [card_holder] => php sdk
  [card_number] => 411111******1111
  [status] => active
  [currency] => EUR
  [expires] => 2016-01-31T23:59:59Z
  [ref] =>
  [merchant_id] => 3
  [test] => 1
  [customer] => Array
  (
    [id] => 2947
  )

)


EXAMPLE REQUEST

var res = StoredCard.Get(1);

EXAMPLE RESPONSE

{
  "card_cvv" : "200",
  "card_holder" : ".net sdk",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "created_at" : "2014-08-06T17:45:53.1767579Z",
  "currency" : "eur",
  "customer" : null,
  "customer_id" : 0,
  "customer_ref" : null,
  "encrypted" : null,
  "expires" : "0001-01-01T00:00:00",
  "id" : 1,
  "merchant_id" : 0,
  "status" : "complete",
  "test" : true,
  "token" : "esuyrh9c467bconwenc"
}

List Stored Cards

By doing a GET request to https://api.mondido.com/v1/stored_cards you will get all stored cards for a merchant.

You can also get the stored cards for a specific customer by doing a GET to: https://api.mondido.com/v1/customers/3/stored_cards

Stored cards support filters on: card_holder, card_number, card_type, created_at, currency, customer_id, expires, id, status, test, token and updated_at.

Copy
EXAMPLE REQUEST

#All cards for a merchant:
curl --user 3:password https://api.mondido.com/v1/stored_cards

#All cards for a customer:
curl --user 3:password https://api.mondido.com/v1/customers/2923/stored_cards

EXAMPLE RESPONSE

[
  {
    "card_holder" : "name name",
    "card_number" : "411111******1111",
    "created_at" : "2014-08-04T17:23:05Z",
    "currency" : "SEK",
    "customer" : { "id" : 2923 },
    "expires" : "2016-01-31T23:59:59Z",
    "id" : 954,
    "merchant_id" : 3,
    "ref" : null,
    "status" : "active",
    "test" : true,
    "token" : "31407172985450590"
  }
]
# REQUEST EXAMPLE

stored_cards = Mondido::CreditCard::StoredCard.all(limit: 2, offset: 4)

# RESPONSE EXAMPLE

[
  <Mondido::CreditCard::StoredCard:0x007fe90d13f058
    @card_holder="Jane Doe",
    @card_number="411111******1111",
    @currency="SEK",
    @id=695,
    @created_at="2014-07-21T14:17:54Z",
    @status="active",
    @merchant_id=10,
    @test=true,
    @customer={"id"=>2513}>,
  <Mondido::CreditCard::StoredCard:0x007fe90d13d3e8
    @card_holder="Jane Doe",
    @card_number="411111******1111",
    @currency="SEK",
    @id=615,
    @created_at="2014-07-16T10:07:08Z",
    @status="active",
    @merchant_id=10,
    @test=false,
    @customer={"id"=>2203}>
]
EXAMPLE REQUEST

$stored_cards = mondido\api\stored_card::index(2,0);

EXAMPLE RESPONSE

Array
(
  [0] => Array
  (
  [id] => 974
  [created_at] => 2014-08-05T08:17:50Z
  [token] => 31407226670131682
  [card_holder] => php sdk
  [card_number] => 411111******1111
  [status] => active
  [currency] => EUR
  [expires] => 2016-01-31T23:59:59Z
  [ref] =>
  [merchant_id] => 3
  [test] => 1
  [customer] => Array
  (
    [id] => 2947
  )

)

[1] => Array
(
...
EXAMPLE REQUEST

var res = StoredCard.List(3,0);

EXAMPLE RESPONSE

[
  {
    "card_cvv" : "200",
    "card_holder" : ".net sdk",
    "card_number" : "411111******1111",
    "card_type" : "VISA",
    "created_at" : "2014-08-06T17:49:46.5722657Z",
    "currency" : "eur",
    "customer" : null,
    "customer_id" : 0,
    "customer_ref" : null,
    "encrypted" : null,
    "expires" : "0001-01-01T00:00:00",
    "id" : 1,
    "merchant_id" : 0,
    "status" : "complete",
    "test" : true,
    "token" : "ksfyw8h467c957"
  }...
]

Create Stored Card

By doing a POST request to https://api.mondido.com/v1/stored_cards you can store the card information and receive a token for future transactions.

Params to send:
card_number string* required

The masked version of the credit card number.

card_holder string* required

The name on the charged credit card

card_cvv string* required

CVV code

card_expiry string* required

Expiration date of the credit card in the format MMYY

currency string* required

The currency (SEK, CAD, CNY, COP, CZK, DKK, HKD, HUF, ISK, INR, ILS, JPY, KES, KRW, KWD, LVL, MYR, MXN, MAD, OMR, NZD, NOK, PAB, QAR, RUB, SAR, SGD, ZAR, CHF, THB, TTD, AED, GBP, USD, TWD, VEF, RON, TRY, EUR, UAH, PLN, BRL)

card_type string* required

VISA, MASTERCARD, STORED_CARD (if the transaction is done using a stored card), etc

customer_ref string

Merchant specific customer ID. If this customer exists the card will be added to that customer. If it doesn't exists a customer will be created.

customer_id int

Mondido specific customer ID. If this customer exists the card will be added to that customer. If it doesn't exists an error will occur.

encrypted string

A comma separated string for the params that you send encrypted. Ex. "card_number,card_cvv"

test bool

Must be true if you are using a test card number.

To store card though the API you need to POST data to https://api.mondido.com/v1/stored_card. When a card is stored you can use the provided token and make a token based transaction for that stored card. Token based payments use the token as the card number and "STORED_CARD" instead of card type (ex. VISA).

Copy
EXAMPLE REQUEST

curl -X POST --data "card_number=4111111111111111&card_expiry=0116&card_holder=name%20name&card_type=VISA&card_cvv=200&currency=sek&test=true" --user 3:password 'https://api.mondido.com/v1/stored_cards'

EXAMPLE RESPONSE

{
  "card_holder" : "name name",
  "card_number" : "411111******1111",
  "created_at" : "2014-08-04T17:23:05Z",
  "currency" : "SEK",
  "customer" : { "id" : 2923 },
  "expires" : "2016-01-31T23:59:59Z",
  "id" : 954,
  "merchant_id" : 3,
  "ref" : null,
  "status" : "active",
  "test" : true,
  "token" : "31407172985450590"
}
# EXAMPLE REQUEST

attributes = {
  card_holder: 'Jane Doe',
  card_type: 'VISA',
  card_number: '4111 1111 1111 1111',
  card_cvv: '200',
  card_expiry: '0916',
  currency: 'SEK'
}

stored_card = Mondido::CreditCard::StoredCard.create(attributes)

# EXAMPLE RESPONSE


<Mondido::CreditCard::StoredCard:0x007fe90d165f78
  @card_holder="Jane Doe",
  @card_type="VISA",
  @card_number="411111******1111",
  @card_cvv="200",
  @currency="SEK",
  @card_expiry="0916",
  @id=1076,
  @created_at="2014-08-08T07:31:45Z",
  @status="active",
  @merchant_id=10,
  @test=false,
  @customer={"id"=>3073}>
EXAMPLE REQUEST

$data = array(
  "card_number" => "4111111111111111",
  "card_holder" => "php sdk",
  "card_expiry" => "0116",
  "card_cvv" => "200",
  "card_type" => "VISA",
  "currency" => "eur",
  "test" => "true"
);

$res = mondido\api\stored_card::create($data);

EXAMPLE RESPONSE

Array
(
  [id] => 975
  [created_at] => 2014-08-05T08:17:53Z
  [token] => 31407226673424954
  [card_holder] => 99221
  [card_number] => 411111******1111
  [status] => active
  [currency] => EUR
  [expires] => 2016-01-31T23:59:59Z
  [ref] =>
  [merchant_id] => 3
  [test] => 1
  [customer] => Array
  (
    [id] => 2948
  )

)
EXAMPLE REQUEST

var refdata = DateTimeOffset.Now.Ticks.ToString();
var postData = new List>();
var encryptedCard = "4111111111111111".RSAEncrypt();

postData.Add(new KeyValuePair("card_expiry", "0116"));
postData.Add(new KeyValuePair("card_holder", refdata));
postData.Add(new KeyValuePair("test", "true"));
postData.Add(new KeyValuePair("card_cvv", "200"));
postData.Add(new KeyValuePair("card_number", encryptedCard));
postData.Add(new KeyValuePair("card_type", "VISA"));
postData.Add(new KeyValuePair("currency", "sek"));
postData.Add(new KeyValuePair("locale", "en"));
postData.Add(new KeyValuePair("encrypted", "card_number"));

var res = StoredCard.Create(postData);


EXAMPLE RESPONSE

{
  "card_cvv" : "200",
  "card_holder" : "635429515090009766",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "created_at" : "2014-08-06T17:51:49.209961Z",
  "currency" : "eur",
  "customer" : null,
  "customer_id" : 0,
  "customer_ref" : null,
  "encrypted" : null,
  "expires" : "0001-01-01T00:00:00",
  "id" : 1,
  "merchant_id" : 0,
  "status" : "complete",
  "test" : true,
  "token" : "dkjsf7w6824yfwh97"
}

Update Stored Card

By doing a PUT request to https://api.mondido.com/v1/stored_cards/1 you can update the card information.

Params to send:
status string* required

active/inactive/deleted

Delete Stored Card

To delete a stored card, you need to do a DELETE request to a specific stored card using this URL https://api.mondido.com/v1/stored_cards/954

Copy
EXAMPLE REQUEST

curl -X DELETE --user 3:password https://api.mondido.com/v1/stored_cards/954

EXAMPLE RESPONSE

{
  "card_holder" : "name name",
  "card_number" : "411111******1111",
  "created_at" : "2014-08-04T17:23:05Z",
  "currency" : "SEK",
  "customer" : { "id" : 2923 },
  "expires" : "2016-01-31T23:59:59Z",
  "id" : 954,
  "merchant_id" : 3,
  "ref" : null,
  "status" : "deleted",
  "test" : true,
  "token" : "31407172985450590"
}
file not found
EXAMPLE REQUEST

$res = mondido\api\stored_card::delete(976);

EXAMPLE RESPONSE

Array
(
  [id] => 976
  [created_at] => 2014-08-05T08:26:38Z
  [token] => 31407227198478378
  [card_holder] => php sdk
  [card_number] => 411111******1111
  [status] => deleted
  [currency] => EUR
  [expires] => 2016-01-31T23:59:59Z
  [ref] =>
  [merchant_id] => 3
  [test] => 1
  [customer] => Array
  (
    [id] => 2949
  )

)
EXAMPLE REQUEST

var res = StoredCard.Delete(1);

EXAMPLE RESPONSE

{
  "card_cvv" : "200",
  "card_holder" : ".net sdk",
  "card_number" : "411111******1111",
  "card_type" : "VISA",
  "created_at" : "2014-08-06T17:54:31.381836Z",
  "currency" : "eur",
  "customer" : null,
  "customer_id" : 0,
  "customer_ref" : null,
  "encrypted" : null,
  "expires" : "0001-01-01T00:00:00",
  "id" : 1,
  "merchant_id" : 0,
  "status" : "deleted",
  "test" : true,
  "token" : "dafklgjd0r98gd0ugjl"
}

Plan

A subscription plan is a payment template for recurring payments that automatically will be executed in Mondido.

id int

Plan ID

created_at datetime

Ex. 2014-04-25T10:36:33Z (UTC)

interval_unit string

days / months

periods int

How many periods to run this plan. 0 = forever

setup_fees object

Starts costs of a plan

{"eur":"0","sek":"0"}

interval int

How often a interval unit should be executed. Ex. every 1 month.

prices object

Price for each subscription transaction

{"eur":"10","sek":"100"}

status string

active,cancelled

name string

Name of plan

description string

Description of plan

trial_length int

Amount of days before the first transaction. 0 = no trial.

merchant_id int

Id of merchant account

The plans can be created and edited in the admin console.

Show Plan

To show a plan with ID 1 you need to GET the following url https://api.mondido.com/v1/plans/1

List Plans

To show a list of plans you need to GET the following url https://api.mondido.com/v1/plans

Plans support filters on: created_at, description, id, interval, interval_unit, name, periods, ref, status, trial_length and updated_at.

Create Plans

To create a plan you need to POST the following url https://api.mondido.com/v1/plans

Params to send:
interval_unit string* required

days / months

periods int

How many periods to run this plan. 0 = forever

interval int* required

How often a interval unit should be executed. Ex. every 1 month.

prices object* required

Price for each merchant available currency as a JSON string

{"eur":"10","sek":"100"}

name string* required

Name of plan

description string

Description of plan

trial_length int

Amount of days before the first transaction. 0 = no trial.

Subscription

Subscriptions are recurring payments connected to a Plan. They have information about customer, stored card and other data.

id int

Subscription ID

created_at datetime

Ex. 2014-04-25T10:36:33Z (UTC)

debt decimal

Additional purchases or discounts that should be added (or subtracted if negative) from the price of the subscription in the next charge.

interval_unit string

days / months

periods_left int

Number of transactions before subscription ends.

total_periods int

Number of transactions in subscription.

interval int

How often a interval unit should be executed. Ex. every 1 month.

price decimal

Price for each transaction

status string

active,cancelled

next_at datetime

Next date and time for execution (UTC)

customer object

Customer that owns the subscription

plan object

The plan connected to the subscription

stored_card object

The stored card connected to the subscription

subscription_quantity int

A number that says how many times the cost of the plan that should processed.

items array

An array of subscription unique items

retry_count int

A number of failed transactions for the subscription. Ex. when a card has expired and cannot be processed.

Show Subscription

To show a subscription with ID 1 you need to GET the following url https://api.mondido.com/v1/subscriptions/1

List Subscription

To show a list of subscriptions you need to GET the following url https://api.mondido.com/v1/subscriptions

You can also get the subscriptions for a specific customer by doing a GET to: https://api.mondido.com/v1/customers/3/subscriptions

Create Subscription

To create a subscriptions you need to POST the following url https://api.mondido.com/v1/subscriptions

You need to send one of stored_card_id, customer_ref or customer_id in order to connect a card to the subscription.

Params to send:
plan_id string* required

The ID of the plan

stored_card_id int

ID of stored card

customer_ref string

Merchant specific customer ID. If this customer exists the card will be added to that customer. If it doesn't exists a customer will be created.

customer_id int

Mondido specific customer ID. If this customer exists the card will be added to that customer. If it doesn't exists an error will occur.

subscription_quantity int

A number that says how many times the cost of the plan that should processed. This could be used as a licence factor when the plan cost A amount and the customer want to subscribe to A * the number of licenses (the multiplier) for each period.

metadata object

Your own custom data in JSON format

items array

An array of subscription unique items

Update Subscription

To update a subscriptions with ID 1 you need to PUT the following url https://api.mondido.com/v1/subscriptions/1.

Params to send:
debt decimal

Additional purchases or discounts that should be added (or subtracted if negative) from the price of the subscription in the next charge.

plan_id string

The ID of the plan. You can move a subscription between plans.

status string

active for making this subscription active, or cancelled to make it passive and non active.

subscription_quantity int

A number that says how many times the cost of the plan that should processed. This could be used as a licence factor when the plan cost A amount and the customer want to subscribe to A * the number of licenses (the multiplier) for each period.

metadata object

Your own custom data in JSON format

stored_card_id int

The id for a previously stored card. Update this to change the underlying card for a subscription

items object

An array of subscription unique items

Customer

A customer is an object that represents an owner of a transaction, stored card or subscription.

created_at datetime

Ex. 2014-04-25T10:20:48Z (UTC)

id int

The ID of the customer

ref string

The merchant internal ID for the customer. If not specified upon creation, it will be generated by Mondido.

metadata object

Custom Metadata

Show Customer

To show a specific customer you need to GET to the url https://api.mondido.com/v1/customers/1.

List Customers

To list customers you need to GET to the url https://api.mondido.com/v1/customers.

Customers support filters on: created_at, id, ref and updated_at.

Create Customer

To create customers you need to POST to the url https://api.mondido.com/v1/customers.

Both ref and metadata are optional but highly recommended to be used. The ref will be created for you if you don't specify it.

Params to send:
ref string

The merchant internal ID for the customer. If not specified upon creation, it will be generated by Mondido.

metadata object

Custom Metadata

Update Customer

To update the metadata of a customer you need to PUT to the url https://api.mondido.com/v1/customers/1.

Params to send:
metadata object

Custom Metadata

Refund

A refund object is connected to a transaction where parts or the whole payment have been returned to the card holder.

id int

The refund ID

created_at datetime

Ex. 2014-04-25T10:20:48Z (UTC)

amount decimal

The refunded amount

reason string

The reason for refunding the card holder

transaction object

The connected transaction object

Show Refund

To show a refund you need to GET to the url https://api.mondido.com/v1/refunds/1.

Copy
EXAMPLE REQUEST

curl --user 3:password https://api.mondido.com/v1/refunds/30

EXAMPLE RESPONSE

{
  "amount" : "171.5",
  "created_at" : "2014-05-21T09:32:40Z",
  "id" : 30,
  "reason" : "Cancelled order",
  "ref" : null,
  "transaction" : { "id" : 1571 }
}
# REQUEST EXAMPLE

refund = Mondido::CreditCard::Refund.get(493)

# RESPONSE EXAMPLE

<Mondido::CreditCard::Refund:0x007fe90d457e20
@transaction_id=8176,
@amount="725.0",
@reason="Customer cancelled order",
@id=493,
@created_at="2014-08-08T08:52:54Z",
@ref=nil,
@transaction={"id"=>8176}>

EXAMPLE REQUEST

$res = mondido\api\refund::get(1);

EXAMPLE RESPONSE

EXAMPLE REQUEST

var res = Refund.Get(1);

EXAMPLE RESPONSE

{
  "amount" : "10.00",
  "created_at" : "2014-08-06T17:58:02.8828125Z",
  "id" : 1,
  "reason" : "test refund",
  "transaction" : null,
  "transaction_id" : 1
}

Create Refund

To create a refund you need to POST to the url https://api.mondido.com/v1/refunds.

Params to send:
transaction_id int* required

ID for the transaction to refund

amount decimal* required

The amount to refund. Ex. 5.00

reason string* required

The reason for the refund. Ex. "Cancelled order"

Copy
EXAMPLE REQUEST

curl -X POST --data "transaction_id=7510&amount=5.00&reason=cancelled%20order" --user 3:password 'https://api.mondido.com/v1/refunds'

EXAMPLE RESPONSE

{
  "amount" : "5.0",
  "reason" : "test",
  "ref" : null,
  "id" : 49,
  "created_at" : "2014-08-04T18:04:21Z",
  "transaction" : {
    "id" : 7510
  }
}
# REQUEST EXAMPLE

    attributes = {
      transaction_id: 8176,
      amount: '725.00',
      reason: 'Customer cancelled order'
    }

    refund = Mondido::CreditCard::Refund.create(attributes)

# RESPONSE EXAMPLE

<Mondido::CreditCard::Refund:0x007fe90d457e20
@transaction_id=8176,
@amount="725.0",
@reason="Customer cancelled order",
@id=493,
@created_at="2014-08-08T08:52:54Z",
@ref=nil,
@transaction={"id"=>8176}>

EXAMPLE REQUEST

$data = array(
  "transaction_id" => "1",
  "amount" => "10.00",
  "reason" => "wrong order"
);

$res = mondido\api\refund::create($data);

EXAMPLE RESPONSE
EXAMPLE REQUEST

var refdata = DateTimeOffset.Now.Ticks.ToString();
var postData = new List>();
postData.Add(new KeyValuePair("transaction_id", "1"));
postData.Add(new KeyValuePair("amount", "1.00"));
postData.Add(new KeyValuePair("reason", refdata));
postData.Add(new KeyValuePair("locale", "en"));

var res = Refund.Create(postData);

EXAMPLE RESPONSE

{
  "amount" : "1.00",
  "created_at" : "2014-08-06T17:59:25.756836Z",
  "id" : 100,
  "reason" : "635429519656083985",
  "transaction" : null,
  "transaction_id" : 1
}

Helpers

Some help requests that can help you with the implemation.

Snn lookup

Lookup a Social Security number (Personnummer) https://api.mondido.com/v1/helpers/ssn/lookup.

This request is recommended to use if you want to use payment_method invoice

Params to send:
ssn string * required

Social Security number (Personnummer). Ex: 192803104351

country_code string * required

Use ISO 3166-1 alpha-3 codes, ex: SWE.

test string

Sets the action to be live or in test mode. test = true, only allows test ssn numbers, test = false, only allow real ssn numbers.

{
"first_name": "Solbritt",
"last_name": "Jansson",
"address_1": "Danagatan 1",
"address_2": null,
"city": "Trångsund",
"zip": "14262",
"country": "SWE",
"ssn": "195203198089"
}

Extendability

Many objects have child resources such as customer and stored card. To minimize the object graph being sent over REST calls you can choose to add full objects by specifying to extend them in the url:

Example:

To show the full transaction object in a refund GET: https://api.mondido.com/v1/refunds/1?extend=transaction

To show both customer and plan to a subscription GET: https://api.mondido.com/v1/subscriptions/1?extend=customer,plan

You can also extend specific attributes for an object like this: https://api.mondido.com/v1/subscriptions/1?extend=customer.ref,plan.id

Metadata

Metadata is custom schemaless information that you can choose to send in to Mondido. It can be information about the customer, the product or about campaigns or offers.

The metadata can be used to customize your hosted payment window or sending personalized receipts to your customers in a webhook.

Example of metadata:

{
  "products":[
  {
    "id":"1",
    "name":"Nice Shoe",
    "price":"100.00",
    "qty":"1",
    "url":"http://mysite.com/product/1"
  }
  ],
  "user":{
    "email":"jd@email.com"
  }
}

The values like products, 1, name, are optional and can be named freely by the merchant. These will be shown in the transaction lists so you can analyze transactions based on metadata and get a comprehensive understanding of your sales.

Why Metadata?

One of the most important benefits of using Mondido is the power of the data that you can send with the payment. The more data you send in the more parameters you have to create custom payment flows and analyze transaction data to see what are your best selling items, services and products.

Popular parameters are:
  • Order information (price, vat, categories, materials, tags)
  • Platform specs (iPhone/Android, OS version, screen size, locale)
  • Application specs (version number, tokens, sessions)
  • Customer information (location, language)

All sent in data can be visualized in your dashboard in graphs or charts so that you easy can follow up and analyze your sales. Mondido understands that making relevant and important business decisions starts with knowing your customers habits, likes and preferences. Incorporating metadata into the payment gives you the best chance to optimize your checkout, A/B test and bring intelligence into your business.

Liquid and Metadata

Liquid is an open-source, Ruby-based template language created by Shopify. It is a well-known framework and is used to load dynamic content on storefronts.

Liquid uses a combination of tags, objects, and filters to load dynamic content. They are used inside the Mondido Hosted Window Payment Form to display information from the payment data and make the template dynamic for each customer, product or transaction.

The official documentation can be found here: https://github.com/Shopify/liquid/wiki/Liquid-for-Designers

You can output information in your metadata to your Hosted Windows Form or in a Receipt Webhook using Liquid syntax. Using the example above, this is the way to output it:

Product name: {{ transaction.metadata['products'].first.name }}
Product quantity: {{ transaction.metadata['products'].first.qty }}

To loop all products:

{%for item in transaction.metadata['products']%}
<li>
  Name: {{ item['name'] }},
  Price: {{ item['price'] }} {{transaction.amount | upcase }},
  Quantity {{ item['qty'] }}
</li>
{% endfor %}

Liquid syntax is used within webhooks and Hosted Windows. Please go to Hosted Window to see the full white list of liquid elements

Webhooks

A webhook is a messaging service that is executed before or after a transaction. You can add one or more webhooks in the Admin console or specify a custom webhook for a transaction. The data that sent varies depending on the context, read more under triggers to see what data to expect.

id int

Webhook ID

created_at datetime

Ex. 2014-04-25T10:36:33Z (UTC)

type string

Webhook type, ex: CustomHttp

response object

The http response, ex: { "code":"400", "body":"Bad request (GET and HEAD requests may not contain a request body)", "message":"Bad Request", "error":"Net::HTTPBadRequest" }

http_method string

Which method that were used, ex. POST, GET

email string

Sender address in a e-mail Webhook

url string

URL in a Custom Http Webhook

trigger string

What event to trigger Webhook, ex. payment_error

data_format string

JSON, form_data or XML

Show Webhooks

To show a webhook with ID 1 you need to GET the following url https://api.mondido.com/v1/webhooks/1

List Webhooks

To show a list of webhooks you need to GET the following url https://api.mondido.com/v1/webhooks

Creating Webhooks in a transaction

Webhooks can either be created from a template in the Admin console, or custom attached to each transaction call from the merchant shop. When creating custom Webhooks you define it using JSON described in the examples below:

Sending E-mail:
{"trigger":"payment_success","email":"myname@domain.com"}
Custom HTTP:
{"url":"https://mybackend.com/confirmOrderFromMondido","trigger":"payment_success","http_method":"post","data_format":"form_data"}
Or as an Array:
[{"trigger":"payment_success","email":"myname@domain.com"},{"url":"https://mybackend.com/confirmOrderFromMondido","trigger":"payment_success","http_method":"post","data_format":"form_data"}]
trigger can be: http_method can be:
  • post
  • get
  • put
  • patch
  • delete
data_format can be:
  • json
  • xml
  • form_data

Important

Custom http webhooks will not follow redirects. Make sure to point them directly at your endpoint.

If you are using the https protocol, your SSL certificate must be valid for the webhook to work.

If the webhook encounters a "500 error" from your endpoint it will retry 20 times for approximately 2 days. If it doesn't succeed during this timeframe you will receive a warning in the dashboard. Any other error will create a notification in the dashboard immediately.

NOTE: When notifications are created in the dashboard you will also be receiving an alert email. Opt-out is possible by unchecking "Get Email Alerts" in Settings > Administrators.

Copy
file not found
//Fetching the incoming transaction data

$transaction = webhook::get($path);
// Fetches and parses the incoming transaction.
// This example is coming from a WebAPI Post action and uses the ControllerContext for data

var transaction = Webhook.GetWebhook(this.ControllerContext.Request);

Liquid and Receipt Webhooks

Liquid is an open-source, Ruby-based template language created by Shopify. It is a well-known framework and is used to load dynamic content on storefronts.

Liquid uses a combination of tags, objects, and filters to load dynamic content. They are used inside the Mondido Hosted Window Payment Form to display information from the payment data and make the template dynamic for each customer, product or transaction.

The official documentation can be found here: https://github.com/Shopify/liquid/wiki/Liquid-for-Designers

You can output information in your receipt Webhook using Liquid syntax. Using the example above, this is the way to output it:

Product name: {{ transaction.metadata['products'].first.name }}
Product quantity: {{ transaction.metadata['products'].first.qty }}  %p
To loop all products:
{%for item in transaction.metadata['products']%}
  <li>
    Name: {{ item['name'] }},
    Price: {{ item['price'] }} {{transaction.amount | upcase }},
    Quantity {{ item['qty'] }}
  </li>
{% endfor %}  %strong For Refunds

You can send a refund confirmation using the After Refund event with the Receipt webhook. There you can output the refunded amount like this:

Hi, here is your refund confirmation for order: {{ transaction.payment_ref }}
Amount: {{ transaction.refunds.last.amount }}
Reason: {{ transaction.refunds.last.reason }}

Items

Items makes it possible to send product info about the items into a payment. This items array is required for invoice payments and can also be used in subscriptions to add additional product charges intop of the Plan amount.

This data is required if the transaction is of type invoice

artno string (maxlength 50) * required

Article number

description string (maxlength 150) * required

Description about the item

amount integer * required

The total price of all the items

qty string * required

The item quantity

vat string * required

VAT rate, ex 25 (No verification or or calculation is made)

discount string

Discount of the products (No verification or or calculation is made)

Example

[{"artno": "001", "amount": 1, "description": "user license2", "qty": 1, "vat": 25, "discount": 0}]

Payment Details

Payment Details make it possible to send customer data. Payment data is perfect way to send specific infomation about a customer.

This data is required if the transaction is of type invoice

ssn string * required

Social Security number (Personnummer). Ex: 192803104351

phone string * required

Phone number

email string * required

Email adress

customer_number string (maxlength 150)

Your custumer number

first_name string (maxlength 150) * required

The first name of the custumer

last_name string (maxlength 150) * required

The last name of the custumer

zip string (maxlength 150) * required

ZIP code

address_1 string (maxlength 150) * required

Primary address

address_2 string (maxlength 150)

Secondary address

city string (maxlength 150) * required

City

country_code string * required

Use ISO 3166-1 alpha-3 codes, ex: SWE.

Supported Card Types

Where are they used?

You need to POST the card type name as card_type parameter

Default card types that you will have access to are VISA and Mastercard, but the other such as AMEX, JCB and Diners are on separate contracts. Contact support for more information about card types.

visa

Visa

mastercard

MasterCard

maestro

Maestro

electron

Electron

debit_mastercard

Debit MasterCard

visa_debit

Visa Debit

laser

Laser

solo

Solo

amex

American Express

diners

Diners

uk_maestro

UK Maestro

jcb

JCB

ukash_neo

Ukash NEO

discover

Discover

stored_card

Stored Card

trustly

Trustly

paypal

PayPal

swish

Swish

Accepted Currencies

sek

Swedish Krona

cad

Canadian Dollar

cny

Chinese Yuan

cop

Colombian Peso

czk

Czech Republic Koruna

dkk

Danish Krone

hkd

Hong Kong Dollar

huf

Hungarian Forint

isk

Icelandic Króna

inr

Indian Rupee

ils

Israeli New Sheqel

jpy

Japanese Yen

kes

Kenyan Shilling

krw

South Korean Won

kwd

Kuwaiti Dinar

lvl

Latvian Lats

myr

Malaysian Ringgit

mxn

Mexican Peso

mad

Moroccan Dirham

omr

Omani Rial

nzd

New Zealand Dollar

nok

Norwegian Krone

pab

Panamanian Balboa

qar

Qatari Rial

rub

Russian Ruble

sar

Saudi Riyal

sgd

Singapore Dollar

zar

South African Rand

chf

Swiss Franc

thb

Thai Baht

ttd

Trinidad and Tobago Dollar

aed

United Arab Emirates Dirham

gbp

British Pound Sterling

usd

US Dollar

twd

New Taiwan Dollar

vef

Venezuelan Bolívar

ron

Romanian Leu

try

Turkish Lira

eur

Euro

uah

Ukrainian Hryvnia

pln

Polish Zloty

brl

Brazilian Real

sek

Swedish Krona

cad

Canadian Dollar

cny

Chinese Yuan

cop

Colombian Peso

czk

Czech Republic Koruna

dkk

Danish Krone

hkd

Hong Kong Dollar

huf

Hungarian Forint

isk

Icelandic Króna

inr

Indian Rupee

ils

Israeli New Sheqel

jpy

Japanese Yen

kes

Kenyan Shilling

krw

South Korean Won

kwd

Kuwaiti Dinar

lvl

Latvian Lats

myr

Malaysian Ringgit

mxn

Mexican Peso

mad

Moroccan Dirham

omr

Omani Rial

nzd

New Zealand Dollar

nok

Norwegian Krone

pab

Panamanian Balboa

qar

Qatari Rial

rub

Russian Ruble

sar

Saudi Riyal

sgd

Singapore Dollar

zar

South African Rand

chf

Swiss Franc

thb

Thai Baht

ttd

Trinidad and Tobago Dollar

aed

United Arab Emirates Dirham

gbp

British Pound Sterling

usd

US Dollar

twd

New Taiwan Dollar

vef

Venezuelan Bolívar

ron

Romanian Leu

try

Turkish Lira

eur

Euro

uah

Ukrainian Hryvnia

pln

Polish Zloty

brl

Brazilian Real

Test Cards

To create test transactions you need to send in a test card number, and also a CVV code that can simulate different responses

Test card numbers:
VISA 4111111111111111
VISA 4012888888881881
VISA 4222222222222
MASTERCARD 5555555555554444
MASTERCARD 5105105105105100
DINERS 30569309025904
DISCOVER 6011111111111117
JCB 3530111333300000
AMEX 378282246310005
Test CVV codes:

When in test mode (test=true) you can use CVV codes to simulate different responses. Anything else will lead to Approved.

200 ACCEPTED
201 DECLINED
202 CVV INVALID
203 EXPIRED
Test Expiry dates:

When in test mode (test=true) you can use specific expiry dates to simulate failed recurring card payments

0137 errors.payment.declined
0237 errors.card.expired

Test customers

To create test invoice transactions you need to send in a test ssn number. Ues different SSN numbers to simulate different responses.

Approved persons Sweden
195203198089 string

{"first_name": "Solbritt", "last_name": "Jansson", "address_1": "Danagatan 1", "address_2": nil, "city": "Trångsund", "zip_code": "14262", "country": "SWE", "ssn": "195203198089"}

192803037999 string

{"first_name": "Stig", "last_name": "Saleh", "address_1": "Lars Kaggsgatan 163 Lgh 1003", "address_2": nil, "city": "Oxie", "zip_code": "23831", "country": "SWE", "ssn": "192803037999"}

192803104351 string

{"first_name": "Erik", "last_name": "Nygren", "address_1": "Hablingbo Prästgården 151 Lgh 1203", "address_2": nil, "city": "Nynäshamn", "zip_code": "14931", "country": "SWE", "ssn": "192803104351"}

192803290853 string

{"first_name": "Erik", "last_name": "Karlsson", "address_1": "Sakrislundsvägen 45 Lgh 1001", "address_2": nil, "city": "Ytterby", "zip_code": "44205", "country": "SWE", "ssn": "192803290853"}

192805181332 string

{"first_name": "Jonas", "last_name": "Olivares", "address_1": "Fröjel Stora Hajdes 717", "address_2": nil, "city": "Spånga", "zip_code": "16345", "country": "SWE", "ssn": "192805181332"}

192806225351 string

{"first_name": "Gustaf", "last_name": "Roslin", "address_1": "Motalagatan 7 Lgh 1005", "address_2": nil, "city": "Linköping", "zip_code": "58254", "country": "SWE", "ssn": "192806225351"}

195202057674 string

{"first_name": #RANDOM#, "last_name": #RANDOM#, "address_1": #RANDOM#, "address_2": #RANDOM#, "city": #RANDOM#, "zip_code": #RANDOM#, "country": "SWE", "ssn": "195202057674"}

197003067985 string

{"first_name": #RANDOM#, "last_name": #RANDOM#, "address_1": #RANDOM#, "address_2": #RANDOM#, "city": #RANDOM#, "zip_code": #RANDOM#, "country": "SWE", "ssn": "197003067985"}

197108262366 string

{"first_name": #RANDOM#, "last_name": #RANDOM#, "address_1": #RANDOM#, "address_2": #RANDOM#, "city": #RANDOM#, "zip_code": #RANDOM#, "country": "SWE", "ssn": "197108262366"}

Denied persons Sweden
192806281719 string

{"first_name": "Kent", "last_name": "Ludwig", "address_1": "Vindögatan 4 Lgh 1502", "address_2": nil, "city": "Gärds Köpinge", "zip_code": "29197", "country": "SWE", "ssn": "192806281719"}

192808219691 string

{"first_name": "Alex John", "last_name": "Säll", "address_1": "Arkeologvägen 52", "address_2": nil, "city": "Skillingaryd", "zip_code": "56830", "country": "SWE", "ssn": "192808219691"}

192809162536 string

{"first_name": "Erik", "last_name": "Wadman", "address_1": "Myrängsvägen 73 Lgh 1410", "address_2": nil, "city": "Höllviken", "zip_code": "23638", "country": "SWE", "ssn": "192809162536"}

192901107488 string

{"first_name": "Kristina", "last_name": "Lindell", "address_1": "Östra Skolgatan 10", "address_2": nil, "city": "Ödeshög", "zip_code": "59979", "country": "SWE", "ssn": "192901107488"}

192901197497 string

{"first_name": "Gustaf", "last_name": "Gustafsson", "address_1": "Spireav 1", "address_2": nil, "city": "Stockholm", "zip_code": "11254", "country": "SWE", "ssn": "192901197497"}

195807065627 string

{"first_name": "Anne Malin", "last_name": "Samuelsson", "address_1": "Härsbackavägen 69 Lgh 1309", "address_2": nil, "city": "Karlstad", "zip_code": "65226", "country": "SWE", "ssn": "195807065627"}

Approved persons Norway
06073910828 string

{"first_name": "Tester", "last_name": "Person", "address_1": "Startveien 56", "address_2": null, "city": "FINNSNES", "zip_code": "9300", "country": "NOR", "ssn": "06073910828"}

Approved persons Finland
071259999M string

{"first_name": "Dmitri Jonatan", "last_name": "Casimirsson", "address_1": "Sepänkatu 11 A 1", "address_2": null, "city": "KUOPIO", "zip_code": "70100", "country": "FIN", "ssn": "071259999M"}

Error messages

We aim to send as many insightful and helpful error messages to you as possible, both in numeric, data and human readable.

{
  name: 'errors.card_number.missing',
  code: 118,
  description: 'Card number is missing'
}

List of error messages:

101 errors.order_id.processed

102 errors.order_id.invalid

103 errors.template.not_found

104 errors.merchant.not_found

105 errors.merchant_id.missing

106 errors.hash.missing

107 errors.hash.invalid

108 errors.amount.missing

109 errors.amount.invalid

110 errors.success_url.missing

111 errors.success_url.reserved

112 errors.error_url.missing

113 errors.error_url.reserved

116 errors.currency.missing

117 errors.currency.unsupported

118 errors.card_number.missing

119 errors.card_number.invalid

120 errors.card_type.missing

121 errors.card_type.unsupported

122 errors.card_holder.missing

123 errors.card_holder.invalid

124 errors.card_cvv.missing

125 errors.card_cvv.invalid

126 errors.card_expiry.missing

127 errors.card_expiry.invalid

128 errors.transaction.not_found

129 errors.payment.declined

130 errors.card.expired

131 errors.card_currency.unsupported

132 errors.reason.missing

133 errors.unexpected

134 errors.amount.excess

135 errors.plan.not_found

136 errors.price.missing

137 errors.stored_card.not_found

138 errors.unauthorized

139 errors.merchant.missing

140 errors.transaction.missing

141 errors.subscription.not_found

142 errors.customer.not_found

143 errors.customer.missing

144 errors.generic

145 errors.payment_ref.invalid

146 errors.payment_ref.processed

147 errors.file_type.unsupported

148 errors.status.invalid

149 errors.json.malformed

150 errors.stored_card.not_active

151 errors.webhook.invalid

152 errors.transaction_id.missing

153 errors.transaction.processed

154 errors.invoice.not_purchable

155 errors.reservation.not_approved

156 errors.personal_number.missing

157 errors.customer_number.missing

158 errors.zip.missing

159 errors.first_name.missing

160 errors.last_name.missing

161 errors.country_code.missing

162 errors.address.missing

163 errors.city.missing

164 errors.payment_details.missing

165 errors.customer_ref.invalid

166 errors.items.missing

167 errors.stored_card.not_test

168 errors.stored_card.is_test

169 errors.mpi.not_approved

170 errors.subscription.status_invalid

171 errors.customer_ref.taken

172 errors.item.amount.missing

173 errors.item.quantity.missing

174 errors.item.vat_rate.missing

175 errors.item.vat_amount.missing

176 errors.item.id.missing

177 errors.item.unit_code.missing

178 errors.item.price.missing

179 errors.item.line_number.missing

180 errors.item.description.missing

181 errors.merchant.invoice.not_configured

182 errors.authentication.failed

183 errors.raw_amount.invalid

184 errors.name.missing

185 errors.interval_unit.missing

186 errors.interval_unit.invalid

187 errors.prices.missing

188 errors.interval.missing

189 errors.interval.invalid

190 errors.password.missing

191 errors.email.missing

192 errors.terms.not_accepted

193 errors.webhook.failed

194 errors.encrypted_param.missing

195 errors.prices.invalid

196 errors.not_found

197 errors.decryption.failed

198 errors.vat_amount.missing

199 errors.reason.too_long

200 errors.encoding.invalid

201 errors.name.duplicate

202 errors.merchant.invalid

203 errors.amount.mismatch

204 errors.webhook.not_found

205 errors.filter_parameter.not_supported

206 errors.filter_value.not_supported

207 errors.account.locked

208 errors.deposit.not_captured

209 errors.ssn_or_country.missing

210 errors.avarda_account.missing

211 errors.missing_or_invalid.ssn

212 errors.missing_or_too_long.first_name

213 errors.missing_or_too_long.last_name

214 errors.invalid.email

215 errors.missing_or_invalid.phone_number

216 errors.missing_or_too_long.address_1

217 errors.missing.address_2

218 errors.missing_or_too_long.city

219 errors.missing_or_too_long.zip_code

220 errors.missing_or_invalid.country_code

221 errors.missing_or_invalid.amount_error

222 errors.too_long.transaction_id

223 errors.must_be_submitted.ssn

224 errors.invoice.credit_approval_failed

225 errors.invoice.credit_check

226 errors.invoice.credit_not_approved

227 errors.invoice.amount.requested.lower_than_minimum_purchase_amount

228 errors.invoice.amount.requested.higher_than_maximum_purchase_amount

229 errors.invoice.amount.maximal_decimal

230 errors.item.missing_or_too_long.description

231 errors.item.total_amount_error

232 errors.item.notes_to_long

233 errors.missing_or_too_long.order_reference

234 errors.invoice.account_error

235 errors.invoice.account_class_error

236 errors.order.reference.error

237 errors.invoice.credit_decision_process_failed

238 errors.helper.ssn.invalid_format

239 errors.helper.ssn.must_be_submitted

240 errors.helper.ssn.for_sweden_must_be_12_digits

241 errors.helper.ssn.address_is_available

242 errors.helper.ssn.have_a_value

243 errors.service_not_available

244 errors.invoice.no_account_exists

245 errors.invoice.purchase_for_different_country

246 errors.invoice.payment_terms_error

247 errors.invoice.account_number_error

248 errors.invoice.account_was_overdrawn

249 errors.invoice.execute.against.this.account

250 errors.password_length

251 errors.customer_not_found

252 errors.request.json_error

253 errors.request.bad_format

254 errors.items.not_array

255 errors.items.description_missing

256 errors.items.notes_missing

257 errors.items.amount_missing

258 errors.items.description_too_long

259 errors.items.amount_not_valid

260 errors.items.transaction_amount_mismatch

261 errors.rules_parser.declined

262 errors.request.json_errors