Overview

Setup

Payment Flows

Sandbox

Test Cards

Merchant Session

Merchant Session Overview

Creating a Merchant Session

Creating a 3DS Merchant Session

Creating a Zero Dollar Merchant Session

Merchant Card

Merchant Card Overview

The Merchant Card object

Getting Merchant Cards

Receiving Card Webhook

Merchant Purchase

Merchant Purchase Overview

The Merchant Purchase object

Creating a Merchant Purchase via Session

Creating a 3DS Merchant Purchase via Session

Creating a Zero Dollar Merchant Purchase via Session

Creating a Merchant Purchase via API

Querying Merchant Purchases

Canceling a Merchant Purchase

Partially Reversing a Merchant Purchase

Fully Reversing a Merchant Purchase

Receiving Purchase Webhook

Merchant Installment

Merchant Installment Overview

The Merchant Installment object

Querying Merchant Installments

Querying Merchant Installment Logs

Receiving Installment Webhook

Credit or Debit card

Learn how to accept online payments by credit or debit card using the Stark Bank platform.

We use a resource called Merchant Purchase to represent each card payment. In this guide, you'll learn how to manage the main use cases and understand the payment life cycle.

Since sensitive card data should never pass through your server, we created the Merchant Session. It lets you set up a secure, temporary session so your website or app can send card details directly to Stark Bank.

After a purchase is created, Stark Bank splits it into one or more installments — even single payments get one — so you can track exactly when each amount will land in your account.

NOTE: Read Core Concepts before continuing this guide.

RESOURCE SUMMARY
The card payment you charge your customer.
Each scheduled payment from a purchase, credited to your account.
Secure session that lets your website send card data directly to Stark Bank.
Saved card details for repeat purchases.

Setup

For each environment (Sandbox or Production):

1. Create an account at Stark Bank.

2. Create a webhook with the following subscriptions to receive events at your desired URL:

merchant-purchase

merchant-installment

merchant-card

2.1. Via Internet Banking:

Integrations > Webhook > New Webhook

2.2. Via API:

Use the POST /webhook route to create the webhook

Payment Flows

There are three main ways to accept a card payment with Stark Bank:

  • Standard checkout (most common): Create a Merchant Session on your server, then collect the card details on your website or app and submit the purchase directly to Stark Bank. This flow doesn't require PCI compliance. See Merchant Session and Merchant Purchase below.
  • 3DS checkout (adds an extra security step): Works the same as a standard checkout, but the cardholder confirms the payment through their bank before it's approved. To enable it, when creating the session: challengeMode="enabled"
  • Repeat charges (requires a prior approved purchase): After a customer's first payment, their card is saved as a Merchant Card. You can use it to charge them again without collecting card details — great for subscriptions or returning customers. See Merchant Card and Creating a Merchant Purchase via API below.

Sandbox

The Sandbox environment simulates all card payment behaviors — approvals, declines, 3DS challenges, and errors — without real cards or charges. Use it to test your full integration before going live.

Sandbox vs Production: Stark Bank uses separate workspaces for each environment, each with its own URL and API keys. Changes in one environment don't affect the other.

If you don't have a Sandbox workspace yet, create one here:

Create a Workspace in Sandbox

Test Cards

Use the card numbers below to simulate different payment scenarios in the Sandbox environment. All test cards accept any future expiration date and any 3-digit CVC.

ScenarioCard NumberExpected Behavior
Successful payment4242 4242 4242 4242Purchase is approved and confirmed.
3DS challenge5500 0000 0000 0004Triggers 3DS verification flow. Requires challengeMode enabled
Declined — insufficient funds4000 0000 0000 0002Purchase is denied with reason: insufficient funds.
Declined — generic5105 1051 0510 5100Purchase is denied by the issuer bank.
Expired card3782 822463 10005Purchase fails due to expired card.
Incorrect CVC3714 496353 98431Purchase fails due to incorrect security code.

Merchant Session Overview

If your website or app needs to collect card details from customers — without those details ever touching your server — you should create a Merchant Session. This is the recommended approach for most integrations.

A Merchant Session works in two steps. First, your server creates a session via the Stark Bank API, defining the allowed funding types, installment options, expiration, and 3DS challenge mode. You'll receive a session object with a unique UUID.

Then, your client-side uses that UUID to submit the purchase along with the cardholder's sensitive data (card number, expiration, security code, holder info, billing address, and browser metadata) directly to Stark Bank — so card data never touches your backend.

Once a card is used successfully through a Merchant Session Purchase, it's stored as a Merchant Card and can be reused in future purchases without a new session.

Creating a Merchant Session

To create a Merchant Purchase, you first need to create a Merchant Session on your server.

The session defines the purchase parameters such as the allowed funding types, installment options, expiration, and amount. You'll receive a UUID that your client-side will use to submit the purchase.

Python

import starkbank
from starkbank.merchantsession import AllowedInstallment

allowed_installments = [
    AllowedInstallment(total_amount=5000, count=1),
    AllowedInstallment(total_amount=5500, count=2)
]

merchant_session = starkbank.MerchantSession(
    allowed_funding_types=["debit", "credit"],
    allowed_installments=allowed_installments,
    expiration=3600,
    challenge_mode="disabled",
    tags=["session_123"]
)

print(starkbank.merchantsession.create(merchant_session))
      

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantSession = await starkbank.merchantSession.create(
        {
            allowedFundingTypes: [
                'debit',
                'credit'
            ],
            allowedInstallments: [
                {
                    totalAmount: 5000,
                    count: 1
                },
                {
                    totalAmount: 5500,
                    count: 2
                }
            ],
            expiration: 3600,
            challengeMode: 'disabled',
            tags: ['session_123']
        }
    );

    console.log(merchantSession)
})();
    

PHP

use StarkBank\MerchantSession;

$allowedInstallments = [
    new MerchantSession\AllowedInstallment(['totalAmount' => 5000, 'count' => 1]),
    new MerchantSession\AllowedInstallment(['totalAmount' => 5500, 'count' => 2])
];

$merchantsession = MerchantSession::create(
    new MerchantSession([
        'allowedFundingTypes' => ["debit", "credit"],
        'allowedInstallments' => $allowedInstallments,
        'expiration' => 3600,
        'challengeMode' => "disabled",
        'tags' => ["session_123"]
    ]);
);

print_r($merchantsession);
    

Java

import com.starkbank.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


Map<String, Object> data = new HashMap<>();
List<String> allowedFundingTypes = new ArrayList<>();
allowedFundingTypes.add("debit");
allowedFundingTypes.add("credit");
data.put("allowedFundingTypes", allowedFundingTypes);

List<MerchantSession.AllowedInstallment> allowedInstallments = new ArrayList<>();

MerchantSession.AllowedInstallment allowedInstallment1 = new MerchantSession.AllowedInstallment(5000L, 1);
MerchantSession.AllowedInstallment allowedInstallment2 = new MerchantSession.AllowedInstallment(5500L, 2);

allowedInstallments.add(allowedInstallment1);
allowedInstallments.add(allowedInstallment2);

data.put("allowedInstallments", allowedInstallments);
data.put("expiration", 3600);
data.put("challengeMode", "enabled");

data.put("tags", new String[]{"session_123"});

MerchantSession merchantSession = MerchantSession.create(new MerchantSession(data));

System.out.println(merchantSession);
          

Ruby

require 'starkbank'

allowed_installments = [
    StarkBank::AllowedInstallment.new(total_amount: 5000, count: 1),
    StarkBank::AllowedInstallment.new(total_amount: 5500, count: 2)
]

response = StarkBank::MerchantSession.create(
    StarkBank::MerchantSession.new(
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: allowed_installments,
        expiration: 3600,
        challenge_mode: "disabled",
        tags: ["session_123"]
    )
)

puts response
      

Elixir


sessions = StarkBank.MerchantSession.create!([
    %StarkBank.MerchantSession{
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: [
            %{
                total_amount: 5000,
                count: 1
            },
            %{
                total_amount: 5500,
                count: 2
            }
        ],
        expiration: 3600,
        challenge_mode: "disabled",
        tags: ["session_123"]
    }
])
          

C#

using StarkBank;
using StarkBank.MerchantSession;
using System;
using System.Collections.Generic;

List<AllowedInstallment> allowedInstallments = new List<AllowedInstallment>
{
    new AllowedInstallment(totalAmount: 5000, count: 1),
    new AllowedInstallment(totalAmount: 5500, count: 2)
};

MerchantSession merchantSession = new MerchantSession(
    allowedFundingTypes: new List<string> { "debit", "credit" },
    allowedInstallments: allowedInstallments,
    expiration: 3600,
    challengeMode: "disabled",
    tags: new List<string> { "session_123" }
);

MerchantSession response = MerchantSession.Create(merchantSession);

Console.WriteLine(response);
          

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantSession "github.com/starkbank/sdk-go/starkbank/merchantsession"
    AllowedInstallment "github.com/starkbank/sdk-go/starkbank/merchantsession/allowedinstallment"
)

func main() {
    merchantSession := MerchantSession.MerchantSession{
        AllowedFundingTypes: []string{"credit"},
        AllowedInstallments: []AllowedInstallment.AllowedInstallment{
            {Count: 1, TotalAmount: 5000},
            {Count: 2, TotalAmount: 5500},
        },
        Expiration:   		 3600,
        ChallengeMode: 		 "disabled",
        Tags:          		 []string{"session_123"},
    }

    createdSession, err := MerchantSession.Create(merchantSession, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdSession)
}
          

Clojure

(defn create-session []
(let [allowed-installments [(allowed-installments/create {:total-amount 5000 :count 1})
                            (allowed-installments/create {:total-amount 5500 :count 2})]
        merchant-session (merchant-session/create {:allowed-funding-types ["debit" "credit"]
                                                    :allowed-installments allowed-installments
                                                    :expiration 3600
                                                    :challenge-mode "disabled"
                                                    :tags ["session_123"]})]
    (println merchant-session)))

          

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "allowedFundingTypes": [
        "debit",
        "credit"
    ],
    "allowedInstallments": [
        {
            "totalAmount": 5000,
            "count": 1
        },
        {
            "totalAmount": 5500,
            "count": 2
        }
    ],
    "expiration": 3600,
    "challengeMode": "disabled",
    "tags": ["session_123"]
}'
    
RESPONSE

Python

MerchantSession(
    allowed_funding_types=['debit', 'credit'],
    allowed_installments=[
        AllowedInstallment(
            count=1,
            total_amount=5000
        ),
        AllowedInstallment(
            count=2,
            total_amount=5500
        )
    ],
    allowed_ips=[],
    challenge_mode=disabled,
    created=2025-02-20 19:34:45.818681,
    expiration=3600,
    id=4932221869752320,
    status=created,
    tags=['session_123'],
    updated=2025-02-20 19:34:45.827862,
    uuid=cc80706d85c5438b9fbe02085daf5315
)
        

Javascript

MerchantSession {
    allowedFundingTypes: [
        'credit',
        'debit'
    ],
    allowedInstallments: [
        {
            count: 1,
            totalAmount: 5000
        },
        {
            count: 2,
            totalAmount: 5500
        }
    ],
    allowedIps: [],
    challengeMode: 'disabled',
    created: '2024-09-06T20:34:10.594675+00:00',
    expiration: 3600,
    id: '6548734053711872',
    status: 'created',
    tags: ['session_123'],
    updated: '2024-09-06T20:34:10.611544+00:00',
    uuid: 'b559350884674b31926abb5a8f3d5f31'
}
    

PHP

StarkBank\MerchantSession Object
(
    [id] => 5674419263373312
    [allowedFundingTypes] => Array
        (
            [0] => credit
            [1] => debit
        )
    [allowedInstallments] => Array
        (
            [0] => StarkBank\AllowedInstallment Object
                (
                    [count] => 1
                    [totalAmount] => 5000
                )
            [1] => StarkBank\AllowedInstallment Object
                (
                    [count] => 2
                    [totalAmount] => 5500
                )
        )
    [allowedIps] => Array
        (
        )
    [challengeMode] => disabled
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.385441
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [expiration] => 3600
    [status] => created
    [tags] => Array
        (
            [0] => session_123
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.415248
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [uuid] => 9ebe95f651054f13a98d977a89b48418
)

        

Java

MerchantSession({
    "id": "5229459015729152",
    "allowedFundingTypes": [
        "credit",
        "debit"
    ],
    "allowedInstallments": [
        {
            "count": 1,
            "totalAmount": 5000
        },
        {
            "count": 2,
            "totalAmount": 5500
        }
    ],
    "allowedIps": [],
    "challengeMode": "disabled",
    "created": "2025-02-10T17:01:27.106142+00:00",
    "expiration": 3600,
    "status": "created",
    "tags": [
        "session_123"
    ],
    "updated": "2025-02-10T17:01:27.135006+00:00",
    "uuid": "63caf64913d14465b1ebe2ec09a8b1cd"
})

Ruby

merchantsession(
    id: 5315436031770624,
    allowed_funding_types: ["debit", "credit"],
    allowed_installments: [
        allowedinstallment(
            count: 1,
            total_amount: 5000
        ),
        allowedinstallment(
            count: 2,
            total_amount: 5200
        )
    ],
    allowed_ips: [],
    challenge_mode: disabled,
    expiration: 3600,
    status: created,
    tags: ["session_123"],
    created: 2025-02-20T21:18:39+00:00,
    updated: 2025-02-20T21:18:39+00:00,
    uuid: 5697ac1bdc944619b365149e317b6dcd
)

Elixir

%StarkBank.MerchantSession{
    id: "5674419263373312",
    allowed_funding_types: ["credit", "debit"],
    allowed_installments: [
        %StarkBank.AllowedInstallment{
            count: 1,
            total_amount: 5000
        },
        %StarkBank.AllowedInstallment{
            count: 2,
            total_amount: 5500
        }
    ],
    allowed_ips: [],
    challenge_mode: "disabled",
    created: ~U[2025-01-30 18:37:06.385441Z],
    expiration: 3600,
    status: "created",
    tags: ["session_123"],
    updated: ~U[2025-01-30 18:37:06.415248Z],
    uuid: "9ebe95f651054f13a98d977a89b48418"
}
        

C#

MerchantSession(
    AllowedFundingTypes: { debit, credit },
    AllowedInstallments: {
        AllowedInstallment(totalAmount: 5000, count: 1),
        AllowedInstallment(totalAmount: 5500, count: 2)
    },
    AllowedIps: {  },
    ChallengeMode: disabled,
    Expiration: 3600,
    Status: created,
    Tags: { session_123 },
    Uuid: b147857fb7e3426dba4ec35382e3efae,
    Created: 2/20/2025 11:22:41 PM,
    Updated: 2/20/2025 11:22:41 PM,
    ID: 4941457391616000
)

Go

{
    Id: 5229459015729152,
    AllowedFundingTypes: ["credit", "debit"],
    AllowedInstallments: [
        {
            Count: 1,
            TotalAmount: 5000
        },
        {
            Count: 2,
            TotalAmount: 5500
    }
    ],
    AllowedIps: [],
    ChallengeMode: "disabled",
    Created: "2025-02-10 17:01:27.106142 +0000 +0000",
    Expiration: 3600,
    Status: "created",
    Tags: ["session_123"],
    Updated: "2025-02-10 17:01:27.135006 +0000 +0000",
    Uuid: "63caf64913d14465b1ebe2ec09a8b1cd"
}
        

Clojure

{:id "5674419263373312",
:allowed-funding-types ["credit" "debit"],
:allowed-installments [{:count 1, :total-amount 5000}
                        {:count 2, :total-amount 5500}],
:allowed-ips [],
:challenge-mode "disabled",
:created "2025-01-30T18:37:06.385441+00:00",
:expiration 3600,
:status "created",
:tags ["session_123"],
:updated "2025-01-30T18:37:06.415248+00:00",
:uuid "9ebe95f651054f13a98d977a89b48418"}

        

Curl

{
    "message": "Merchant Session successfully created",
    "session": {
        "allowedFundingTypes": [
            "credit",
            "debit"
        ],
        "allowedInstallments": [
            {
                "count": 1,
                "totalAmount": 5000
            },
            {
                "count": 2,
                "totalAmount": 5500
            }
        ],
        "allowedIps": [],
        "challengeMode": "disabled",
        "created": "2024-09-06T20:34:10.594675+00:00",
        "expiration": 3600,
        "id": "6548734053711872",
        "status": "created",
        "tags": ["session_123"],
        "updated": "2024-09-06T20:34:10.611544+00:00",
        "uuid": "b559350884674b31926abb5a8f3d5f31"
    }
}
    

Creating a 3DS Merchant Session

To create a Merchant Purchase with 3DS authentication, you need to create a Merchant Session with the field 'challengeMode' set to 'enabled'.

3DS (3-D Secure) adds an extra verification step where the cardholder confirms the payment through their bank — similar to a two-factor authentication for card payments. Apart from the 'challengeMode' field, the session creation is identical to a regular Merchant Session.

Python

import starkbank
from starkbank.merchantsession import AllowedInstallment

allowed_installments = [
    AllowedInstallment(total_amount=5000, count=1),
    AllowedInstallment(total_amount=5500, count=2)
]

merchant_session = starkbank.MerchantSession(
    allowed_funding_types=["debit", "credit"],
    allowed_installments=allowed_installments,
    expiration=3600,
    challenge_mode="enabled",
    tags=[]
)

print(starkbank.merchantsession.create(merchant_session))
  

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantSession = await starkbank.merchantSession.create(
    {
        allowedFundingTypes: [
            'debit',
            'credit'
        ],
        allowedInstallments: [
            {
                totalAmount: 5000,
                count: 1
            },
            {
                totalAmount: 5500,
                count: 2
            }
        ],
        expiration: 3600,
        challengeMode: 'enabled',
        tags: []
    }
    );

    console.log(merchantSession)
})();
  

PHP

use StarkBank\MerchantSession;

$allowedInstallments = [
    new MerchantSession\AllowedInstallment(['totalAmount' => 5000, 'count' => 1]),
    new MerchantSession\AllowedInstallment(['totalAmount' => 5500, 'count' => 2])
];

$merchantSession = MerchantSession::create(
    new MerchantSession([
        'allowedFundingTypes' => ["debit", "credit"],
        'allowedInstallments' => $allowedInstallments,
        'expiration' => 3600,
        'challengeMode' => "enabled",
        'tags' => []
    ]);
);

print_r($merchantSession);

Java

import com.starkbank.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


Map<String, Object> data = new HashMap<>();
List<String> allowedFundingTypes = new ArrayList<>();
allowedFundingTypes.add("debit");
allowedFundingTypes.add("credit");
data.put("allowedFundingTypes", allowedFundingTypes);

List<MerchantSession.AllowedInstallment> allowedInstallments = new ArrayList<>();

MerchantSession.AllowedInstallment allowedInstallment1 = new MerchantSession.AllowedInstallment(5000L, 1);
MerchantSession.AllowedInstallment allowedInstallment2 = new MerchantSession.AllowedInstallment(5500L, 2);

allowedInstallments.add(allowedInstallment1);
allowedInstallments.add(allowedInstallment2);

data.put("allowedInstallments", allowedInstallments);
data.put("expiration", 3600);
data.put("challengeMode", "enabled");

data.put("tags", new String[]{});

MerchantSession merchantSession = MerchantSession.create(new MerchantSession(data));

System.out.println(merchantSession);
      

Ruby

require 'starkbank'

allowed_installments = [
    StarkBank::AllowedInstallment.new(total_amount: 5000, count: 1),
    StarkBank::AllowedInstallment.new(total_amount: 5500, count: 2)
]

response = StarkBank::MerchantSession.create(
    StarkBank::MerchantSession.new(
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: allowed_installments,
        expiration: 3600,
        challenge_mode: "enabled",
        tags: ["customer/123", "cart/456"]
    )
)

puts response
  

Elixir


sessions = StarkBank.MerchantSession.create!([
    %StarkBank.MerchantSession{
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: [
            %{
                total_amount: 5000,
                count: 1
            },
            %{
                total_amount: 5500,
                count: 2
            }
        ],
        expiration: 3600,
        challenge_mode: "enabled",
        tags: []
    }
])
      

C#

using StarkBank;
using StarkBank.MerchantSession;
using System;
using System.Collections.Generic;

List<AllowedInstallment> allowedInstallments = new List<AllowedInstallment> {
    new AllowedInstallment(totalAmount: 5000, count: 1),
    new AllowedInstallment(totalAmount: 5500, count: 2)
};

MerchantSession merchantSession = new MerchantSession(
    allowedFundingTypes: new List<string> { "debit", "credit" },
    allowedInstallments: allowedInstallments,
    expiration: 3600,
    challengeMode: "enabled",
    tags: new List<string> { "customer/123", "cart/456" }
);

MerchantSession response = MerchantSession.Create(merchantSession);
Console.WriteLine(response);
      

Go

package main

import (
	"fmt"
	"github.com/starkbank/sdk-go/starkbank"
	MerchantSession "github.com/starkbank/sdk-go/starkbank/merchantsession"
	AllowedInstallment "github.com/starkbank/sdk-go/starkbank/merchantsession/allowedinstallment"
)

func main() {
    merchantSession := MerchantSession.MerchantSession{
		AllowedFundingTypes: []string{"credit"},
		AllowedInstallments: []AllowedInstallment.AllowedInstallment{
			{Count: 1, TotalAmount: 5000},
			{Count: 2, TotalAmount: 5500},
		},
		Expiration:   		 3600,
		ChallengeMode: 		 "enabled",
		Tags:          		 []string{},
	}

    createdSession, err := MerchantSession.Create(merchantSession, starkbank.User)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdSession)
}
      

Clojure

(defn create-session []
  (let [allowed-installments [(allowed-installments/create {:total-amount 5000 :count 1})
                              (allowed-installments/create {:total-amount 5500 :count 2})]
        merchant-session (merchant-session/create {:allowed-funding-types ["debit" "credit"]
                                                    :allowed-installments allowed-installments
                                                    :expiration 3600
                                                    :challenge-mode "enabled"
                                                    :tags []})]
    (println merchant-session)))

      

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
  "allowedFundingTypes": [
      "debit",
      "credit"
  ],
  "allowedInstallments": [
      {
          "totalAmount": 5000,
          "count": 1
      },
      {
          "totalAmount": 5500,
          "count": 2
      }
  ],
  "expiration": 3600,
  "challengeMode": "enabled",
  "tags": []
}'
  
RESPONSE

Python

MerchantSession(
    allowed_funding_types=['debit', 'credit'],
    allowed_installments=[
        AllowedInstallment(
            count=1,
            total_amount=5000
        ),
        AllowedInstallment(
            count=2,
            total_amount=5500
        )
    ],
    allowed_ips=[],
    challenge_mode=enabled,
    created=2025-02-20 22:15:39.839786,
    expiration=3600,
    id=5665171930349568,
    status=created,
    tags=[],
    updated=2025-02-20 22:15:39.850892,
    uuid=9ebe95f651054f13a98d977a89b48418
)
        

Javascript

MerchantSession {
  id: '6131179614896128',
  allowedFundingTypes: ['debit', 'credit'],
  allowedInstallments: [
   { count: 1, totalAmount: 5000 },
   { count: 2, totalAmount: 5500 }
  ],
  allowedIps: [],
  challengeMode: 'enabled',
  created: '2025-02-20T19:59:16.596424+00:00',
  expiration: 3600,
  status: 'created',
  tags: ['customer/123', 'cart/456'],
  updated: '2025-02-20T19:59:16.625478+00:00',
  uuid: '9ebe95f651054f13a98d977a89b48418'
}
  

PHP

StarkBank\MerchantSession Object
(
    [id] => 5674419263373312
    [allowedFundingTypes] => Array
        (
            [0] => credit
            [1] => debit
        )
    [allowedInstallments] => Array
        (
            [0] => StarkBank\AllowedInstallment Object
                (
                    [count] => 1
                    [totalAmount] => 5000
                )
            [1] => StarkBank\AllowedInstallment Object
                (
                    [count] => 2
                    [totalAmount] => 5500
                )
        )
    [allowedIps] => Array
        (
        )
    [challengeMode] => enabled
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.385441
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [expiration] => 3600
    [status] => created
    [tags] => Array
        (
            [0] => customer/123
            [1] => cart/456
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.415248
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [uuid] => 9ebe95f651054f13a98d977a89b48418
)
      

Java

MerchantSession({
  "allowedFundingTypes": [
    "debit",
    "credit"
  ],
  "allowedInstallments": [
    {
      "totalAmount": 5000,
      "count": 1
    },
    {
      "totalAmount": 5500,
      "count": 2
    }
  ],
  "allowedIps": [],
  "challengeMode": "enabled",
  "created": "2025-02-20T20:39:32.942453+00:00",
  "expiration": 3600,
  "status": "created",
  "tags": [
    "stark",
    "suit"
  ],
  "updated": "2025-02-20T20:39:32.972641+00:00",
  "uuid": "9ebe95f651054f13a98d977a89b48418",
  "id": "4942962752487424"
})
    

Ruby

merchantsession(
    id: 5315436031770624,
    allowed_funding_types: ["debit", "credit"],
    allowed_installments: [
        allowedinstallment(
            count: 1,
            total_amount: 5000
        ),
        allowedinstallment(
            count: 2,
            total_amount: 5500
        )
    ],
    allowed_ips: [],
    challenge_mode: disabled,
    expiration: 3600,
    status: created,
    tags: ["customer/123", "cart/456"],
    created: 2025-02-20T21:18:39+00:00,
    updated: 2025-02-20T21:18:39+00:00,
    uuid: 9ebe95f651054f13a98d977a89b48418
)

Elixir

%StarkBank.MerchantSession{
    id: "5674419263373312",
    allowed_funding_types: ["credit", "debit"],
    allowed_installments: [
        %StarkBank.AllowedInstallment{
            count: 1,
            total_amount: 5000
        },
        %StarkBank.AllowedInstallment{
            count: 2,
            total_amount: 5500
        }
    ],
    allowed_ips: [],
    challenge_mode: "enabled",
    created: ~U[2025-01-30 18:37:06.385441Z],
    expiration: 3600,
    status: "created",
    tags: ["customer/123", "cart/456"],
    updated: ~U[2025-01-30 18:37:06.415248Z],
    uuid: "9ebe95f651054f13a98d977a89b48418"
}
      

C#

MerchantSession(
    AllowedFundingTypes: { debit, credit },
    AllowedInstallments: {
        AllowedInstallment(totalAmount: 5000, count: 1),
        AllowedInstallment(totalAmount: 5500, count: 2)
    },
    AllowedIps: {  },
    ChallengeMode: enabled,
    Expiration: 3600,
    Status: created,
    Tags: { customer/123, cart/456 },
    Uuid: 611c44265db940138a2191a889673f7b,
    Created: 2/20/2025 10:33:21 PM,
    Updated: 2/20/2025 10:33:21 PM,
    ID: 5106757462392832
)

Go

{
    Id: 5229459015729152
    AllowedFundingTypes: ["credit", "debit"]
    AllowedInstallments: [
        {
            Count: 1,
            TotalAmount: 5000
        }
        {
            Count: 2,
            TotalAmount: 5500
        }
    ],
    AllowedIps: []
    ChallengeMode: "enabled",
    Created: "2025-02-10 17:01:27.106142 +0000 +0000"
    Expiration: 3600
    Status: "created"
    Tags: ["customer/123", "cart/456"],
    Updated: "2025-02-10 17:01:27.135006 +0000 +0000"
    Uuid: "9ebe95f651054f13a98d977a89b48418"
}
      

Clojure

{:id "5674419263373312",
 :allowed-funding-types ["credit" "debit"],
 :allowed-installments [{:count 1, :total-amount 5000}
                        {:count 2, :total-amount 5500}],
 :allowed-ips [],
 :challenge-mode "enabled",
 :created "2025-01-30T18:37:06.385441+00:00",
 :expiration 3600,
 :status "created",
 :tags ["customer/123" "cart/456"],
 :updated "2025-01-30T18:37:06.415248+00:00",
 :uuid "9ebe95f651054f13a98d977a89b48418"}

      

Curl

{
    "message": "Merchant Session successfully created",
    "session": {
        "allowedFundingTypes": [
            "credit",
            "debit"
        ],
        "allowedInstallments": [
            {
                "count": 1,
                "totalAmount": 5000
            },
            {
                "count": 2,
                "totalAmount": 5500
            }
        ],
        "allowedIps": [],
        "challengeMode": "enabled",
        "created": "2025-01-30T18:37:06.385441+00:00",
        "expiration": 3600,
        "id": "5674419263373312",
        "status": "created",
        "tags": [
            "customer/123",
            "cart/456"
        ],
        "updated": "2025-01-30T18:37:06.415248+00:00",
        "uuid": "9ebe95f651054f13a98d977a89b48418"
    }
}

Creating a Zero Dollar Merchant Session

A zero dollar Merchant Session is used to validate a card without charging the cardholder.

To create one, the field 'allowedInstallments' must contain just one option with 'totalAmount' equal to '0' and 'count' equal to '1', as in the example below.

Python

import starkbank
from starkbank.merchantsession import AllowedInstallment

allowed_installments = [
    AllowedInstallment(total_amount=0, count=1)
]

merchant_session = starkbank.MerchantSession(
    allowed_funding_types=["debit", "credit"],
    allowed_installments=allowed_installments,
    expiration=3600,
    challenge_mode="disabled",
    tags=["customer/123", "cart/456"]
)

print(starkbank.merchantsession.create(merchant_session))
      

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantSession = await starkbank.merchantSession.create(
    {
        allowedFundingTypes: [
            'debit',
            'credit'
        ],
        allowedInstallments: [
            {
                totalAmount: 0,
                count: 1
            }
        ],
        expiration: 3600,
        challengeMode: 'disabled',
        tags: ['customer/123', 'cart/456']
    }
    );

    console.log(merchantSession)
})();
  

PHP

use StarkBank\MerchantSession;

$allowedInstallments = [
    new MerchantSession\AllowedInstallment(['totalAmount' => 0, 'count' => 1])
];

$merchantsession = MerchantSession::create(
    new MerchantSession([
        'allowedFundingTypes' => ["debit", "credit"],
        'allowedInstallments' => $allowedInstallments,
        'expiration' => 3600,
        'challengeMode' => "disabled",
        'tags' => ["customer/123", "cart/456"]
    ]);
);

print_r($merchantsession);
      

Java

import com.starkbank.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


Map<String, Object> data = new HashMap<>();
List<String> allowedFundingTypes = new ArrayList<>();
allowedFundingTypes.add("debit");
allowedFundingTypes.add("credit");
data.put("allowedFundingTypes", allowedFundingTypes);

List<MerchantSession.AllowedInstallment> allowedInstallments = new ArrayList<>();

MerchantSession.AllowedInstallment allowedInstallment = new MerchantSession.AllowedInstallment(0, 1);

allowedInstallments.add(allowedInstallment);

data.put("allowedInstallments", allowedInstallments);
data.put("expiration", 3600);
data.put("challengeMode", "enabled");

data.put("tags", new String[]{"customer/123", "cart/456"});

MerchantSession merchantSession = MerchantSession.create(new MerchantSession(data));

System.out.println(merchantSession);
      

Ruby

require 'starkbank'

allowed_installments = [
    StarkBank::AllowedInstallment.new(total_amount: 0, count: 1)
]

response = StarkBank::MerchantSession.create(
    StarkBank::MerchantSession.new(
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: allowed_installments,
        expiration: 3600,
        challenge_mode: "disabled",
        tags: ["customer/123", "cart/456"]
    )
)

puts response
      

Elixir

sessions = StarkBank.MerchantSession.create!([
    %StarkBank.MerchantSession{
        allowed_funding_types: ["debit", "credit"],
        allowed_installments: [
            %{
                total_amount: 0,
                count: 1
            }
        ],
        expiration: 3600,
        challenge_mode: "disabled",
        tags: ["customer/123", "cart/456"]
    }
])
      

C#

using StarkBank;
using StarkBank.MerchantSession;
using System;

List<StarkBank.AllowedInstallment> allowedInstallments = new List<AllowedInstallment>
{
    new AllowedInstallment(TotalAmount: 0, Count: 1)
};

MerchantSession merchantSession = new MerchantSession
{
    AllowedFundingTypes: new List<string> { "debit", "credit" },
    AllowedInstallments: allowedInstallments,
    Expiration: 3600,
    ChallengeMode: "disabled",
    Tags: new List<string> { "customer/123", "cart/456" }
};

MerchantSession response = MerchantSession.Create(merchantSession);
Console.WriteLine(response);
      

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantSession "github.com/starkbank/sdk-go/starkbank/merchantsession"
    AllowedInstallment "github.com/starkbank/sdk-go/starkbank/merchantsession/allowedinstallment"
)

func main() {
    merchantSession := MerchantSession.MerchantSession{
        AllowedFundingTypes: []string{"credit", "debit"},
        AllowedInstallments: []AllowedInstallment.AllowedInstallment{
            {Count: 1, TotalAmount: 0},
        },
        Expiration:   		 3600,
        ChallengeMode: 		 "disabled",
        Tags:          		 []string{"customer/123", "cart/456"},
    }

    createdSession, err := MerchantSession.Create(merchantSession, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdSession)
}
      

Clojure

(defn create-session []
(let [allowed-installments [(allowed-installments/create {:total-amount 0 :count 1})]
        merchant-session (merchant-session/create {:allowed-funding-types ["debit" "credit"]
                                                    :allowed-installments allowed-installments
                                                    :expiration 3600
                                                    :challenge-mode "disabled"
                                                    :tags ["customer/123" "cart/456"]})]
    (println merchant-session)))
      

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
  "allowedFundingTypes": [
      "debit",
      "credit"
  ],
  "allowedInstallments": [
      {
          "totalAmount": 0,
          "count": 1
      }
  ],
  "expiration": 3600,
  "challengeMode": "disabled",
  "tags": ["customer/123", "cart/456"]
}'
  
RESPONSE

Python

MerchantSession(
    allowed_funding_types=['debit', 'credit'],
    allowed_installments=[
        AllowedInstallment(
            count=1,
            total_amount=0
        )
    ],
    allowed_ips=[],
    challenge_mode=disabled,
    created=2025-02-20 22:31:33.437247,
    expiration=3600,
    id=6722046587305984,
    status=created,
    tags=['customer/123', 'cart/456'],
    updated=2025-02-20 22:31:33.444136,
    uuid=c1229dc3a50647fab780bf8e5c1c9b54
)
        

Javascript

MerchantSession {
  id: '4661487775776768',
  allowedFundingTypes: ['debit', 'credit'],
  allowedInstallments: [{ count: 1, totalAmount: 0 }],
  allowedIps: [],
  challengeMode: 'disabled',
  created: '2025-02-20T20:03:41.543867+00:00',
  expiration: 3600,
  status: 'created',
  tags: ['purchase_1234'],
  updated: '2025-01-30T18:42:48.849121+00:00',
  uuid: '452bf4416051477d83f30d56253b5c10'
}
  

PHP

StarkBank\MerchantSession Object
(
    [id] => 5674419263373312
    [allowedFundingTypes] => Array
        (
            [0] => credit
            [1] => debit
        )
    [allowedInstallments] => Array
        (
            [0] => StarkBank\AllowedInstallment Object
                (
                    [count] => 1
                    [totalAmount] => 0
                )
        )
    [allowedIps] => Array
        (
        )
    [challengeMode] => disabled
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.385441
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [expiration] => 3600
    [status] => created
    [tags] => Array
        (
            [0] => customer/123
            [1] => cart/456
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:37:06.415248
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [uuid] => c1229dc3a50647fab780bf8e5c1c9b54
)
      

Java

MerchantSession({
    "id": "5229459015729152",
    "allowedFundingTypes": [
        "credit",
        "debit"
    ],
    "allowedInstallments": [
        {
            "count": 1,
            "totalAmount": 0
        }
    ],
    "allowedIps": [],
    "challengeMode": "disabled",
    "created": "2025-02-10T17:01:27.106142+00:00",
    "expiration": 3600,
    "status": "created",
    "tags": [
        "customer/123",
        "cart/456"
    ],
    "updated": "2025-02-10T17:01:27.135006+00:00",
    "uuid": "c1229dc3a50647fab780bf8e5c1c9b54"
})
      

Ruby

merchant_session(
    allowed_funding_types=["credit", "debit"],
    allowed_installments=[
        allowedinstallment(
            count: 1,
            total_amount: 0
        )
    ],
    allowed_ips=[],
    challenge_mode="disabled",
    created="2025-02-10T17:01:27.106142+00:00",
    expiration=3600,
    id="5229459015729152",
    status="created",
    tags=["customer/123", "cart/456"],
    updated="2025-02-10T17:01:27.135006+00:00",
    uuid="c1229dc3a50647fab780bf8e5c1c9b54"
)

      

Elixir

%StarkBank.MerchantSession{
    id: "5674419263373312",
    allowed_funding_types: ["credit", "debit"],
    allowed_installments: [
        %StarkBank.AllowedInstallment{
            count: 1,
            total_amount: 0
        }
    ],
    allowed_ips: [],
    challenge_mode: "disabled",
    created: ~U[2025-01-30 18:37:06.385441Z],
    expiration: 3600,
    status: "created",
    tags: ["customer/123", "cart/456"],
    updated: ~U[2025-01-30 18:37:06.415248Z],
    uuid: "c1229dc3a50647fab780bf8e5c1c9b54"
}
      

C#

MerchantSession(
    ID: 5229459015729152,
    AllowedFundingTypes: ["credit", "debit"],
    AllowedInstallments: [
        {
            Count: 1,
            TotalAmount: 0
        }
    ],
    AllowedIps: { },
    ChallengeMode: "disabled",
    Created: 02/10/2025 17:01:27,
    Expiration: 3600,
    Status: "created",
    Tags: ["customer/123", "cart/456"],
    Updated: 02/10/2025 17:01:27,
    Uuid: c1229dc3a50647fab780bf8e5c1c9b54
)
      

Go

{
    Id: 5229459015729152
    AllowedFundingTypes: ["credit", "debit"]
    AllowedInstallments: [
        {
            Count: 1,
            TotalAmount: 0
        }
    ]
    AllowedIps: []
    ChallengeMode: "disabled"
    Created: "2025-02-10 17:01:27.106142 +0000 +0000"
    Expiration: 3600
    Status: "created"
    Tags: ["customer/123", "cart/456"]
    Updated: "2025-02-10 17:01:27.135006 +0000 +0000"
    Uuid: "c1229dc3a50647fab780bf8e5c1c9b54"
}
      

Clojure

{:id "5674419263373312",
:allowed-funding-types ["credit" "debit"],
:allowed-installments [{:count 1, :total-amount 0}],
:allowed-ips [],
:challenge-mode "disabled",
:created "2025-01-30T18:37:06.385441+00:00",
:expiration 3600,
:status "created",
:tags ["customer/123" "cart/456"],
:updated "2025-01-30T18:37:06.415248+00:00",
:uuid "c1229dc3a50647fab780bf8e5c1c9b54"}
      

Curl

{
    "message": "Merchant Session successfully created",
    "session": {
        "allowedFundingTypes": [
            "credit",
            "debit"
        ],
        "allowedInstallments": [
            {
                "count": 1,
                "totalAmount": 0
            }
        ],
        "allowedIps": [],
        "challengeMode": "disabled",
        "created": "2025-01-30T18:42:48.824119+00:00",
        "expiration": 3600,
        "id": "5539375022604288",
        "status": "created",
        "tags": [
            "customer/123",
            "cart/456"
        ],
        "updated": "2025-01-30T18:42:48.849121+00:00",
        "uuid": "c1229dc3a50647fab780bf8e5c1c9b54"
    }
}

Merchant Card Overview

A Merchant Card stores card information for use in future recurring purchases.

The Merchant Card object

Attributes

id STRING

Unique id for the merchant card.

created STRING

Creation datetime. Example: "2020-04-23T23:00:00.000000+00:00".

ending STRING

Last 4 digits of the card number.

expiration STRING

Card expiration date. Example: "2025-06".

fundingType STRING

Funding type. Options: "credit", "debit".

holderName STRING

Name of the card holder.

network STRING

Card network.

status STRING

Current card status. Options: "active", "expired", "canceled", "blocked".

tags LIST OF STRINGS

Tags associated with the card.

updated STRING

Last update datetime. Example: "2020-04-23T23:00:00.000000+00:00".

Getting Merchant Cards

You can query Merchant Cards using tags to find cards associated with a specific customer.

When creating a Merchant Card, assign a tag that identifies the customer. Later, use the tags parameter to retrieve all cards linked to that customer.

Python

import starkbank

merchant_cards = starkbank.merchantcard.query(
    tags=["customer_1234"]
)

for merchant_card in merchant_cards:
    print(merchant_card)
        

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantCards = await starkbank.merchantCard.query({
        tags: ["customer_1234"]
    });

    for await (let merchantCard of merchantCards){
        console.log(merchantCard);
    }
})();
        

PHP

use StarkBank\MerchantCard;

$merchantCards = MerchantCard::query([
    "tags" => ["customer_1234"]
]);

foreach($merchantCards as $merchantCard){
    print_r($merchantCard);
}
        

Java

import com.starkbank.*;
import com.starkbank.utils.Generator;
import java.util.HashMap;


HashMap<String, Object> params = new HashMap<>()();
params.put("tags", new String[]{"customer_1234"});
Generator<MerchantCard> merchantCards = MerchantCard.query(params);

for (MerchantCard merchantCard : merchantCards) {
    System.out.println(merchantCard);
}
        

Ruby

require 'starkbank'

merchantCards = StarkBank::MerchantCard.query(
    tags: ["customer_1234"]
)

merchantCards.each do |merchantCard|
    puts merchantCard
end
        

Elixir

merchantCards = StarkBank.MerchantCard.query!(
    tags: ["customer_1234"]
)

for merchantCard <- merchantCards do
    merchantCard |> IO.inspect
end
        

C#

using System;
using StarkBank;

List<MerchantCard> merchantCards = MerchantCard.Query(
    tags: new List<string> { "customer_1234" }
).ToList();

foreach (MerchantCard merchantCard in merchantCards)
{
    Console.WriteLine(merchantCard);
}
        

Go

package main

import (
    "fmt"
    MerchantCard "github.com/starkbank/sdk-go/starkbank/merchantcard"
)

func main() {

    var params = map[string]interface{}{}
    params["tags"] = []string{"customer_1234"}

    merchantcards, errorChannel := MerchantCard.Query(params, nil)

    loop:
    for {
        select {
        case err := <-errorChannel:
            if err.Errors != nil {
                for _, e := range err.Errors {
                    fmt.Printf("code: %s, message: %s", e.Code, e.Message)
                }
            }
        case merchantcard, ok := <-merchantcards:
            if !ok {
                break loop
            }
            fmt.Printf("%+v", merchantcard)
        }
    }
}
        

Clojure

(def merchant-cards
  (starkbank.merchant-card/query
    {
      :tags ["customer_1234"]
    }))
(dorun (map println merchant-cards))
        

Curl

curl --location --request GET '{{baseUrl}}/v2/merchant-card?tags=customer_1234' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
        
RESPONSE

Python

MerchantCard(
    created=2025-02-18 18:39:28.597425,
    ending=0007,
    expiration=2045-02-01 02:59:59.999999,
    funding_type=credit,
    holder_name=Margaery Tyrell,
    id=6295415968235520,
    network=mastercard,
    status=active,
    tags=['customer_1234'],
    updated=2025-02-19 20:08:50.497358
)
        

Javascript

MerchantCard {
  id: '6295415968235520',
  ending: '0007',
  expiration: '2045-02-01T02:59:59.999999+00:00',
  created: '2025-02-18T18:39:28.597425+00:00',
  fundingType: 'credit',
  holderName: 'Margaery Tyrell',
  network: 'mastercard',
  status: 'active',
  tags: [ 'customer_1234' ],
  updated: '2025-02-19T20:08:50.497358+00:00'
}
        

PHP

StarkBank\MerchantCard Object
(
    [id] => 6295415968235520
    [ending] => 0007
    [expiration] => DateTime Object
        (
            [date] => 2045-02-01 02:59:59.999999
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [created] => DateTime Object
        (
            [date] => 2025-02-18 18:39:28.597425
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [fundingType] => credit
    [holderName] => Margaery Tyrell
    [network] => mastercard
    [status] => active
    [tags] => Array
        (
            [0] => customer_1234
        )
    [updated] => DateTime Object
        (
            [date] => 2025-02-19 20:08:50.497358
            [timezone_type] => 1
            [timezone] => +00:00
        )
)
        

Java

MerchantCard({
    "id": "6295415968235520",
    "ending": "0007",
    "expiration": "2045-02-01T02:59:59.999999+00:00",
    "created": "2025-02-18T18:39:28.597425+00:00",
    "fundingType": "credit",
    "holderName": "Margaery Tyrell",
    "network": "mastercard",
    "status": "active",
    "tags": ["customer_1234"],
    "updated": "2025-02-19T20:08:50.497358+00:00"
})
        

Ruby

merchantcard(
    id: 6295415968235520,
    ending: 0007,
    expiration: 2045-02-01 02:59:59.999999,
    created: 2025-02-18T18:39:28+00:00,
    funding_type: credit,
    holder_name: Margaery Tyrell,
    network: mastercard,
    status: active,
    tags: ["customer_1234"],
    updated: 2025-02-19T20:08:50+00:00
)
        

Elixir

%StarkBank.MerchantCard{
    id: "6295415968235520",
    ending: "0007",
    expiration: ~U[2045-02-01 02:59:59.999999Z],
    created: ~U[2025-02-18 18:39:28.597425Z],
    funding_type: "credit",
    holder_name: "Margaery Tyrell",
    network: "mastercard",
    status: "active",
    tags: ["customer_1234"],
    updated: ~U[2025-02-19 20:08:50.497358Z]
}
        

C#

MerchantCard(
    Ending: 0007,
    Expiration: 2/1/2045 2:59:59 AM,
    Created: 2/18/2025 6:39:28 PM,
    FundingType: credit,
    HolderName: Margaery Tyrell,
    ID: 6295415968235520,
    Network: mastercard,
    Status: active,
    Tags: { customer_1234 },
    Updated: 2/19/2025 8:08:50 PM
)
        

Go

{
    Id: "6295415968235520"
    Ending: "0007"
    Expiration: "2045-02-01 02:59:59.999999 +0000 +0000"
    Created: "2025-02-18 18:39:28.597425 +0000 +0000"
    FundingType: "credit"
    HolderName: "Margaery Tyrell"
    Network: "mastercard"
    Status: "active"
    Tags: ["customer_1234"]
    Updated: "2025-02-19 20:08:50.497358 +0000 +0000"
}
        

Clojure

{:id "6295415968235520",
 :ending "0007",
 :expiration "2045-02-01T02:59:59.999999+00:00",
 :created "2025-02-18T18:39:28.597425+00:00",
 :funding-type "credit",
 :holder-name "Margaery Tyrell",
 :network "mastercard",
 :status "active",
 :tags ["customer_1234"],
 :updated "2025-02-19T20:08:50.497358+00:00"}
        

Curl

{
    "cursor": "ClcKFAoHY3JlYXRlZBIJCKDD2tebqYcDEjtqGml-YXBpLW1zLWNhcmQtbWVyY2hhbnQtc2J4ch0LEhBNZXJjaGFudFB1cmNoYXNlGICAgNil4boIDBgAIAE=",
    "cards": [
        {
            "id": "6295415968235520",
            "ending": "0007",
            "expiration": "2045-02-01T02:59:59.999999+00:00",
            "created": "2025-02-18T18:39:28.597425+00:00",
            "fundingType": "credit",
            "holderName": "Margaery Tyrell",
            "network": "mastercard",
            "status": "active",
            "tags": ["customer_1234"],
            "updated": "2025-02-19T20:08:50.497358+00:00"
        }
    ]
}

Receiving Card Webhook

Listen to Card Webhooks

After creation, you can use webhooks to monitor status changes.

Every time a Merchant Card changes, we create a Log. Logs are useful for understanding the life cycle of each Merchant Card. Whenever a new Log is created, we'll send a webhook to your registered URL.

RESPONSE

Python

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Javascript

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

PHP

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Java

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Ruby

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Elixir

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

C#

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Go

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Clojure

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Curl

{
    "event": {
        "created": "2025-02-07T19:29:54.242930+00:00",
        "id": "6723525920423936",
        "log": {
        "card": {
            "created": "2025-02-07T19:29:49.891002+00:00",
            "ending": "0148",
            "expiration": "2035-01-31T23:59:59.999999+00:00",
            "fundingType": "debit",
            "holderName": "Elend Venture",
            "id": "5754637843955712",
            "network": "visa",
            "status": "active",
            "tags": [],
            "updated": "2025-02-07T19:29:50.060413+00:00"
        },
        "created": "2025-02-07T19:29:50.060428+00:00",
        "errors": [],
        "id": "5191687890534400",
        "type": "active"
    },
    "subscription": "merchant-card",
    "workspaceId": "6314371953197056"
}

Merchant Purchase Overview

A Merchant Purchase represents a card payment charged to your customer. It can be created in two ways: through a Merchant Session, where your client-side submits the purchase directly to Stark Bank using the session UUID; or via the API using a Merchant Card ID for recurring charges.

After creation, the purchase follows a life cycle: it starts as created, moves to approved once the card network authorizes it, and is finally confirmed when the payment is settled. You can also cancel an approved purchase or reverse a confirmed one, either partially or fully.

Each Merchant Purchase generates one or more Merchant Installments, which represent the individual payments that will be credited to your account.

The Merchant Purchase Status

A Merchant Purchase has the following life cycle:

merchant-purchase-status

StatusDescription
CreatedThe Merchant Purchase was created in Stark Bank.
PendingWaiting for the user to complete 3DS verification. This only applies if you enabled 3DS.
ApprovedThe issuer bank accepted the purchase.
DeniedThe issuer bank denied the purchase.
FailedThe purchase failed.
ConfirmedThe payment was confirmed and will be credited to your account.
PaidAll installments were paid to your account.
CanceledThe purchase was canceled by you.
VoidThe purchase was fully reversed.

The Merchant Purchase Logs

Every time a Merchant Purchase changes, we create a Log. Logs are useful for understanding the life cycle of each purchase. Whenever a new Log is created, we'll send a webhook to your registered URL.

Check out this diagram to understand the possible Merchant Purchase Logs:

merchant-purchase-log

Log typeStatusDescription
CreatedCreatedThe Merchant Purchase was successfully created in Stark Bank.
PendingPendingThe Merchant Purchase is waiting for the user to complete 3DS verification.
ApprovedApprovedThe Merchant Purchase was authorized by the issuer bank.
DeniedDeniedThe Merchant Purchase was denied by the issuer bank.
FailedFailedThe Merchant Purchase processing failed.
ConfirmedConfirmedThe Merchant Purchase payment was confirmed and will be credited to your account.
CancelingApprovedThe Merchant Purchase cancellation is being processed.
CanceledCanceledThe Merchant Purchase was canceled.
PaidPaidAll installments of the Merchant Purchase were paid to your account.
ReversingConfirmedThe Merchant Purchase reversal is being processed.
ReversedConfirmedThe Merchant Purchase was partially reversed.
VoidedVoidedThe Merchant Purchase was fully reversed.

Note: You only receive these webhooks if you have the merchant-purchase subscription set.

The Merchant Purchase object

Attributes

id STRING

Unique id for the merchant purchase.

amount INTEGER

Amount in cents to be received. Example: 100 (R$1.00).

cardEnding STRING

Last 4 digits of the card.

cardId STRING

ID of the Merchant Card used for the purchase.

challengeMode STRING

Holder verification mode. Options: "enabled", "disabled".

challengeUrl STRING

URL for holder verification challenge.

created STRING

Creation datetime. Example: "2020-04-23T23:00:00.000000+00:00".

currencyCode STRING

Currency code of the purchase.

endToEndId STRING

End-to-end ID of the purchase.

fee INTEGER

Fee charged in cents.

fundingType STRING

Funding type. Options: "credit", "debit".

installmentCount INTEGER

Number of purchase installments.

network STRING

Card network.

source STRING

Source of the purchase.

status STRING

Current purchase status. Options: "created", "approved", "denied", "confirmed", "paid", "pending", "canceled", "voided", "failed".

tags LIST OF STRINGS

Tags associated with the purchase.

updated STRING

Last update datetime. Example: "2020-04-23T23:00:00.000000+00:00".

Creating a Merchant Purchase via Session

After creating a Merchant Session, you can create a purchase using the UUID generated in the session through a public route. This means the transaction does not need to go through your backend.

Note: the UUID serves as a unique key that allows us to associate the purchase your client is creating directly with your merchant account.

Python

import starkbank

merchant_purchase = starkbank.merchantsession.purchase(
    uuid= "cc80706d85c5438b9fbe02085daf5315",
    purchase= starkbank.merchantsession.Purchase(
        amount=5500,
        installment_count=2,
        holder_name="Rhaenyra Targaryen",
        holder_email="rhaenyra.targaryen@gmail.com",
        holder_phone="11985923451",
        funding_type="credit",
        billing_country_code="BRA",
        billing_city="Sao Paulo",
        billing_state_code="SP",
        billing_street_line_1="Rua Casterly Rock, 2000",
        billing_street_line_2="1 andar",
        billing_zip_code="01450-000",
        metadata={
            "userAgent": "Mozilla",
            "userIp": "255.255.255.255",
            "language": "pt-BR",
            "timezoneOffset": 3,
            "extraData": "extraData"
        },
        card_expiration="2035-01",
        card_number="5277696455399733",
        card_security_code="123",

    )
)
        

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantSessionPurchase = await starkbank.merchantSession.purchase(
        '71c57d95f5134740b2194e2172a87e33',
        {
            amount: 5000,
            installmentCount: 1,
            cardExpiration: '2035-01',
            cardNumber: '5277696455399733',
            cardSecurityCode: '123',
            fundingType: 'credit',
            holderName: 'Rhaenyra Targaryen',
            billingCity: 'Sao Paulo',
            billingCountryCode: 'BRA',
            billingStateCode: 'SP',
            billingStreetLine1: 'Rua Casterly Rock, 2000',
            billingStreetLine2: '1 andar',
            billingZipCode: '01450-000',
            holderEmail: 'rhaenyra.targaryen@gmail.com',
            holderPhone: '11985923451',
            metadata: {
                userAgent: 'Mozilla',
                timezoneOffset: 3,
                userIp: '255.255.255.255',
                language: 'pt-BR',
                extraData: 'extraData'
            },
            tags: []
        }
    );
    console.log(merchantSessionPurchase);
})();
    

PHP

$purchase = new MerchantSession\Purchase([
    'amount' => 10000,
    'installmentCount' => 5,
    'holderEmail' => "rhaenyra.targaryen@gmail.com",
    'holderPhone' => "11985923451",
    'holderName' => "Rhaenyra Targaryen",
    'fundingType' => "credit",
    'billingCountryCode' => "BRA",
    'billingCity' => "Sao Paulo",
    'billingState_code' => "SP",
    'billingStreetLine1' => "Rua Casterly Rock, 2000",
    'billingStreetLine2' => "1 andar",
    'billingZipCode' => "01450-000",
    'metadata' => [
        'userAgent' => "Mozilla",
        'userIp' => "255.255.255.255",
        'language' => "pt-BR",
        'timezoneOffset' => 3,
        'extraData' => "extraData"
    ],
    'cardExpiration' => "2035-01",
    'cardNumber' => "5277696455399733",
    'cardSecurityCode' => "123"
]);

$merchantSessionPurchase = MerchantSession::purchase(
    "b6c0ff6039674b28a2cab51a355bd6a0",
    $purchase
);

print_r($merchantSessionPurchase);
        

Java

import com.starkbank.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Map<String, Object> data = new HashMap<>();
data.put("amount", 10000);
data.put("installmentCount", 5);
data.put("holderEmail", "rhaenyra.targaryen@gmail.com");
data.put("holderPhone", "11985923451");
data.put("holderName", "Rhaenyra Targaryen");
data.put("fundingType", "credit");
data.put("billingCountryCode", "BRA");
data.put("billingCity", "Sao Paulo");
data.put("billingStateCode", "SP");
data.put("billingStreetLine1", "Rua Casterly Rock, 2000");
data.put("billingStreetLine2", "1 andar");
data.put("billingZipCode", "01450-000");
data.put("cardExpiration", "2035-01");
data.put("cardNumber", "5277696455399733");
data.put("cardSecurityCode", "123");

Map<String, Object> metadata = new HashMap<>();
metadata.put("userAgent", "Mozilla");
metadata.put("userIp", "255.255.255.255");
metadata.put("language", "pt-BR");
metadata.put("timezoneOffset", 3);
metadata.put("extraData", "extraData");
data.put("metadata", metadata);

MerchantSession.Purchase merchantSessionPurchase = MerchantSession.purchase("b6c0ff6039674b28a2cab51a355bd6a0", new MerchantSession.Purchase(data));

System.out.println(merchantSessionPurchase);
        

Ruby

require 'starkbank'

metadata = {
    userAgent: "Mozilla",
    userIp: "255.255.255.255",
    language: "pt-BR",
    timezoneOffset: 3,
    extraData: "extraData"
}

purchase_data = {
    amount: 5000,
    installment_count: 1,
    holder_email: "rhaenyra.targaryen@gmail.com",
    holder_phone: "11985923451",
    holder_name: "Rhaenyra Targaryen",
    funding_type: "credit",
    billing_country_code: "BRA",
    billing_city: "Sao Paulo",
    billing_state_code: "SP",
    billing_street_line_1: "Rua Casterly Rock, 2000",
    billing_street_line_2: "1 andar",
    billing_zip_code: "01450-000",
    metadata: metadata,
    card_expiration: "2035-01",
    card_number: "5277696455399733",
    card_security_code: "123"
}

response = StarkBank::MerchantSession.purchase(
    uuid: "68b14c3512b947378e033cf474abcf35",
    payload: purchase_data
)

puts response
        

Elixir


purchase = StarkBank.MerchantSession.purchase!([
    uuid: "b6c0ff6039674b28a2cab51a355bd6a0",
    %StarkBank.MerchantSession.Purchase{
        amount: 10000,
        installment_count: 5,
        holder_email: "rhaenyra.targaryen@gmail.com",
        holder_phone: "11985923451",
        holder_name: "Rhaenyra Targaryen",
        funding_type: "credit",
        billing_country_code: "BRA",
        billing_city: "Sao Paulo",
        billing_state_code: "SP",
        billing_street_line_1: "Rua Casterly Rock, 2000",
        billing_street_line_2: "1 andar",
        billing_zip_code: "01450-000",
        metadata: %{
            userAgent: "Mozilla",
            userIp: "255.255.255.255",
            language: "pt-BR",
            timezoneOffset: 3,
            extraData: "extraData"
        },
        card_expiration: "2035-01",
        card_number: "5277696455399733",
        card_security_code: "123"
    }
])
        

C#

using StarkBank;
using StarkBank.MerchantPurchase;
using System;
using System.Collections.Generic;

MerchantSession.Purchase purchaseExample = new MerchantSession.Purchase(
    amount: 5000,
    installmentCount: 1,
    cardExpiration: "2035-01",
    cardNumber: "5102589999999954",
    cardSecurityCode: "123",
    holderName: "Rhaenyra Targaryen",
    holderEmail: "rhaenyra.targaryen@gmail.com",
    holderPhone: "11111111111",
    fundingType: "credit",
    billingCountryCode: "BRA",
    billingCity: "São Paulo",
    billingStateCode: "SP",
    billingStreetLine1: "Rua Casterly Rock, 2000",
    billingStreetLine2: "",
    billingZipCode: "11111-111",
    metadata: new Dictionary<string, object>
    {
        { "userAgent", "Postman" },
        { "userIp", "255.255.255.255" },
        { "language", "pt-BR" },
        { "timezoneOffset", 3 },
        { "extraData", "extraData" }
    }
);

MerchantSession.Purchase purchase = MerchantSession.PostPurchase(id: "cbb0c5a53a31464198a29cd7427fe709", purchaseExample);

Console.WriteLine(purchase);
        

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantSession "github.com/starkbank/sdk-go/starkbank/merchant/session"
    Purchase "github.com/starkbank/sdk-go/starkbank/merchant/session"

)

func main() {
purchase := Purchase.Purchase{
    Amount:            10000,
    InstallmentCount:  5,
    HolderEmail:       "rhaenyra.targaryen@gmail.com",
    holderName:        "Rhaenyra Targaryen",
    HolderPhone:       "11985923451",
    FundingType:       "credit",
    BillingCountryCode: "BRA",
    BillingCity:       "Sao Paulo",
    BillingStateCode:  "SP",
    BillingStreetLine1: "Rua Casterly Rock, 2000",
    BillingStreetLine2: "1 andar",
    BillingZipCode:    "01450-000",
    Metadata: map[string]interface{}{
        "userAgent":      "Mozilla",
        "userIp":         "255.255.255.255",
        "language":       "pt-BR",
        "timezoneOffset": 3,
        "extraData":      "extraData",
    },
    CardExpiration: "2035-01",
    CardNumber: "5277696455399733",
    CardSecurityCode: "123",
}

createdPurchase, err := MerchantSession.PostPurchase("b6c0ff6039674b28a2cab51a355bd6a0", purchase, nil)

if err.Errors != nil {
    for _, e := range err.Errors {
        fmt.Printf("code: %s, message: %s", e.Code, e.Message)
    }
}

fmt.Println(createdPurchase)
}
        

Clojure


(defn create-purchase []
  (let [merchant-purchase (merchant-session/purchase {
    :uuid  "b6c0ff6039674b28a2cab51a355bd6a0"
    (:amount 10000
    :installment_count 5
    :holder_email "rhaenyra.targaryen@gmail.com"
    :holder_phone "11985923451"
    :holder_phone "Rhaenyra Targaryen"
    :funding_type "credit"
    :billing_country_code "BRA"
    :billing_city "Sao Paulo"
    :billing_state_code "SP"
    :billing_street_line1 "Rua Casterly Rock, 2000"
    :billing_street_line2 "1 andar"
    :billing_zip_code "01450-000"
    :metadata metadata
    :card_expiration "2035-01",
    :card_number "5277696455399733",
    :card_security_code "123")})]
    (println merchant-purchase)))

(create-purchase)
        

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session/b6c0ff6039674b28a2cab51a355bd6a0/purchase' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '
{
    "amount": 10000,
    "installmentCount": 5,
    "cardExpiration": "2035-01",
    "cardNumber": "5277696455399733",
    "cardSecurityCode": "123",
    "holderName": "Rhaenyra Targaryen",
    "holderEmail": "rhaenyra.targaryen@gmail.com",
    "holderPhone": "11985923451",
    "fundingType": "credit",
    "billingCountryCode": "BRA",
    "billingCity": "São Paulo",
    "billingStateCode": "SP",
    "billingStreetLine1": "Rua Casterly Rock, 2000",
    "billingStreetLine2": "1 andar",
    "billingZipCode": "01450-000",
    "metadata": {
        "extraData": "extraData",
        "language": "pt-BR",
        "timezoneOffset": 3,
        "userAgent": "Mozilla",
        "userIp": "255.255.255.25"
    },
    "tags": []
}
    
RESPONSE

Python

Purchase(
    amount=5500,
    billing_city=Sao Paulo,
    billing_country_code=BRA,
    billing_state_code=SP,
    billing_street_line_1=Rua Casterly Rock, 2000,
    billing_street_line_2=1 andar,
    billing_zip_code=01450-000,
    card_ending=9733,
    card_id=,
    challenge_mode=disabled,
    challenge_url=,
    created=2025-02-20 20:17:48.562909,
    currency_code=BRL,
    end_to_end_id=6a361ae0-f977-43b7-9970-4f59d58cd126,
    fee=0,
    funding_type=credit,
    holder_email=rhaenyra.targaryen@gmail.com,
    holder_name=Rhaenyra Targaryen,
    holder_phone=11985923451,
    id=5167847869251584,
    installment_count=2,
    metadata={
        'extraData': 'extraData',
        'language': 'pt-BR',
        'timezoneOffset': 3,
        'userAgent': 'Mozilla',
        'userIp': '255.255.255.255'},
    network=mastercard,
    source=merchant-session/4913745390206976,
    status=denied,
    tags=['session_123'],
    updated=2025-02-20 20:17:49.620024
)
        

Javascript

Purchase {
    id: '6254646393831424',
    amount: 5000,
    installmentCount: 1,
    holderName: 'Rhaenyra Targaryen',
    holderEmail: 'rhaenyra.targaryen@gmail.com',
    holderPhone: '11985923451',
    fundingType: 'credit',
    billingCountryCode: 'BRA',
    billingCity: 'Sao Paulo',
    billingStateCode: 'SP',
    billingStreetLine1: 'Rua Casterly Rock, 2000',
    billingStreetLine2: '1 andar',
    billingZipCode: '01450-000',
    metadata: {
        extraData: 'extraData',
        language: 'pt-BR',
        timezoneOffset: 3,
        userAgent: 'Mozilla',
        userIp: '255.255.255.255'
    },
    cardId: '',
    cardEnding: '9733',
    challengeMode: 'disabled',
    challengeUrl: '',
    created: '2025-02-20T20:28:39.835147+00:00',
    currencyCode: 'BRL',
    endToEndId: 'b8933d90-811d-4010-819d-86d87867059b',
    fee: 0,
    network: 'mastercard',
    source: 'merchant-session/6052679516160000',
    status: 'denied',
    tags: [ 'purchase_1234' ],
    updated: '2025-02-20T20:28:40.902236+00:00'
}
    

PHP

StarkBank\MerchantSession\Purchase Object
(
    [id] => 5693253768708096
    [amount] => 10000
    [billingCity] => Sao Paulo
    [billingCountryCode] => BRA
    [billingStateCode] => SP
    [billingStreetLine1] => Rua Casterly Rock, 2000
    [billingStreetLine2] =>
    [billingZipCode] => 01450-000
    [cardEnding] => 9733
    [cardId] => 5647443689472000
    [challengeMode] => enabled
    [challengeUrl] => https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:39:52.136626
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [currencyCode] => BRL
    [endToEndId] => 00372f52-52c8-4907-b03b-3946cacae4e3
    [fee] => 0
    [fundingType] => debit
    [holderEmail] => tywin.lannister@gmail.com
    [holderName] => Tywin Lannister
    [holderPhone] => 11985923451
    [installmentCount] => 5
    [metadata] => Array
        (
            [language] => pt-BR
            [timezoneOffset] => 3
            [userAgent] => Mozilla
            [userIp] => 255.255.255.255
            [extraData] => extraData
        )
    [network] => mastercard
    [source] => merchant-session/5674419263373312
    [status] => pending
    [tags] => Array
        (
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:39:54.029416
            [timezone_type] => 1
            [timezone] => +00:00
        )
)

        

Java

Purchase({
    "amount": 10000,
    "billingCity": "Sao Paulo",
    "billingCountryCode": "BRA",
    "billingStateCode": "SP",
    "billingStreetLine1": "Rua Casterly Rock, 2000",
    "billingStreetLine2": "1 andar",
    "billingZipCode": "01450-000",
    "cardEnding": "9733",
    "cardId": "5647443689472000",
    "challengeMode": "enabled",
    "challengeUrl": "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    "created": "2025-01-30T18:39:52.136626+00:00",
    "currencyCode": "BRL",
    "endToEndId": "00372f52-52c8-4907-b03b-3946cacae4e3",
    "fee": 0,
    "fundingType": "debit",
    "holderEmail": "tywin.lannister@gmail.com",
    "holderName": "Tywin Lannister",
    "holderPhone": "11985923451",
    "id": "5693253768708096",
    "installmentCount": 5,
    "metadata": {
        "language": "pt-BR",
        "timezoneOffset": 3,
        "userAgent": "Mozilla",
        "userIp": "255.255.255.255",
        "extraData": "extraData"
    },
    "network": "mastercard",
    "source": "merchant-session/5674419263373312",
    "status": "pending",
    "tags": [],
    "updated": "2025-01-30T18:39:54.029416+00:00"
})
  

Ruby

purchase(
    id: 5099195274887168,
    amount: 5000,
    holder_name: Rhaenyra Targaryen,
    funding_type: credit,
    holder_email: rhaenyra.targaryen@gmail.com,
    holder_phone: 11985923451,
    installment_count: 1,
    billing_country_code: BRA,
    billing_city: Sao Paulo,
    billing_state_code: SP,
    billing_street_line_1: Rua Casterly Rock, 2000,
    billing_street_line_2: 1 andar,
    billing_zip_code: 01450-000,
    metadata: {
        "extradata"=>"extraData",
        "language"=>"pt-BR",
        "timezoneoffset"=>3,
        "useragent"=>"Mozilla",
        "userip"=>"255.255.255.255"
    },
    card_ending: 9733,
    card_id: ,
    challenge_mode: disabled,
    challenge_url: ,
    created: 2025-02-20T22:31:13+00:00,
    currency_code: BRL,
    end_to_end_id: 6ba82bc4-8ca3-4613-a38e-575a25984e26,
    fee: 0,
    network: mastercard,
    source: merchant-session/4992147199623168,
    status: denied,
    tags: ["session_123"],
    updated: 2025-02-20T22:31:14+00:00
)
        

Elixir

%StarkBank.MerchantSession.Purchase{
    amount: 10000,
    billing_city: "Sao Paulo",
    billing_country_code: "BRA",
    billing_state_code: "SP",
    billing_street_line_1: "Rua Casterly Rock, 2000",
    billing_street_line_2: "",
    billing_zip_code: "01450-000",
    card_ending: "9733",
    card_id: "5647443689472000",
    challenge_mode: "enabled",
    challenge_url: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    created: ~U[2025-01-30 18:39:52.136626Z],
    currency_code: "BRL",
    end_to_end_id: "00372f52-52c8-4907-b03b-3946cacae4e3",
    fee: 0,
    funding_type: "debit",
    holder_email: "tywin.lannister@gmail.com",
    holder_name: "Tywin Lannister",
    holder_phone: "11985923451",
    id: "5693253768708096",
    installment_count: 5,
    metadata: %{
        language: "pt-BR",
        timezoneOffset: 3,
        userAgent: "Mozilla",
        userIp: "255.255.255.255"
        extraData: "extraData"
    },
    network: "mastercard",
    source: "merchant-session/5674419263373312",
    status: "pending",
    tags: [],
    updated: ~U[2025-01-30 18:39:54.029416Z]
}
        

C#

MerchantSession.Purchase(
    Amount: 5000,
    BillingCity: "Sao Paulo",
    BillingCountryCode: "BRA",
    BillingStateCode: "SP",
    BillingStreetLine1: "Rua Casterly Rock, 2000",
    BillingStreetLine2: "",
    BillingZipCode: "01450-000",
    CardEnding: "9733",
    CardId: "5647443689472000",
    ChallengeMode: "enabled",
    ChallengeUrl: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    Created: "01/30/2025 18:39:52",
    CurrencyCode: "BRL",
    EndToEndId: "00372f52-52c8-4907-b03b-3946cacae4e3",
    Fee: 0,
    FundingType: "debit",
    HolderEmail: "tywin.lannister@gmail.com",
    HolderName: "Tywin Lannister",
    HolderPhone: "11985923451",
    ID: "5693253768708096",
    InstallmentCount: 1,
    Metadata: {
        Language: "pt-BR",
        TimezoneOffset: 3,
        UserAgent: "Mozilla",
        UserIp: "255.255.255.255"
        extraData: "extraData"
    },
    Network: "mastercard",
    Source: "merchant-session/5674419263373312",
    Status: "pending",
    Tags: [],
    Updated: "01/30/2025 18:39:54",
)
        

Go

{
    Id: "5693253768708096",
    Amount: 5000,
    BillingCity: "Sao Paulo",
    BillingCountryCode: "BRA",
    BillingStateCode: "SP",
    BillingStreetLine1: "Rua Casterly Rock, 2000",
    BillingStreetLine2: "",
    BillingZipCode: "01450-000",
    CardEnding: "9733",
    CardId: "5647443689472000",
    ChallengeMode: "enabled",
    ChallengeUrl: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    Created: "2025-01-30 18:39:52.136626 +0000 +0000",
    CurrencyCode: "BRL",
    EndToEndId: "00372f52-52c8-4907-b03b-3946cacae4e3",
    Fee: 0,
    FundingType: "debit",
    HolderEmail: "tywin.lannister@gmail.com",
    HolderName: "Tywin Lannister",
    HolderPhone: "11985923451",
    InstallmentCount: 1,
    Metadata: {
        Language: "pt-BR",
        TimezoneOffset: 3,
        UserAgent: "Mozilla",
        UserIp: "255.255.255.255"
        ExtraData: "extraData"
    },
    Network: "mastercard",
    Source: "merchant-session/5674419263373312",
    Status: "pending",
    Tags: [],
    Updated: "2025-01-30 18:39:54.029416 +0000 +0000",
}
        

Clojure

{:id "5693253768708096",
:amount 5000,
:billing-city "Sao Paulo",
:billing-country-code "BRA",
:billing-state-code "SP",
:billing-street-line1 "Rua Casterly Rock, 2000",
:billing-street-line2 "1 andar",
:billing-zip-code "01450-000",
:card-ending "9733",
:card-id "5647443689472000",
:challenge-mode "enabled",
:challenge-url "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
:created "2025-01-30T18:39:52.136626+00:00",
:currency-code "BRL",
:end-to-end-id "00372f52-52c8-4907-b03b-3946cacae4e3",
:fee 0,
:funding-type "debit",
:holder-email "tywin.lannister@gmail.com",
:holder-name "Tywin Lannister",
:holder-phone "11985923451",
:installment-count 1,
:metadata {:language "pt-BR",
            :timezone-offset 3,
            :user-agent "Mozilla",
            :user-ip "255.255.255.255"
            :extraData "extraData"},
:network "mastercard",
:source "merchant-session/5674419263373312",
:status "pending",
:tags [],
:updated "2025-01-30T18:39:54.029416+00:00"}
        

Curl

{
    "message": "Merchant Purchase successfully created",
    "purchase": {
        "amount": 5000,
        "billingCity": "Sao Paulo",
        "billingCountryCode": "BRA",
        "billingStateCode": "SP",
        "billingStreetLine1": "Rua Casterly Rock, 2000",
        "billingStreetLine2": "1 andar",
        "billingZipCode": "01450-000",
        "cardEnding": "5682",
        "cardId": "5647443689472000",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2024-09-06T21:36:15.255100+00:00",
        "currencyCode": "BRL",
        "endToEndId": "8bd3bf6c-04dd-4878-9c09-f933a9234519",
        "fee": 0,
        "fundingType": "credit",
        "holderEmail": "tywin.lannister@gmail.com",
        "holderName": "Tywin Lannister",
        "holderPhone": "11985923451",
        "id": "6237525488173056",
        "installmentCount": 1,
        "metadata": {
            "language": "pt-BR",
            "timezoneOffset": 3,
            "userAgent": "Mozilla",
            "userIp": "255.255.255.255
            "extraData": "extraData"
        },
        "network": "mastercard",
        "source": "merchant-session/6012328071921664",
        "status": "approved",
        "tags": [],
        "updated": "2024-09-06T21:36:17.785121+00:00"
    }
}
    

Creating a 3DS Merchant Purchase via Session

After creating a 3DS Merchant Session, you can create a purchase using the UUID generated in the session through a public route. This transaction does not need to go through your backend.

To create a merchant purchase with the 3DS protocol, you need to fill in the fields: 'billingCity', 'billingCountryCode', 'billingStateCode', 'billingStreetLine1', 'billingStreetLine2', 'billingZipCode', 'holderEmail', 'holderPhone'.

You also need to send the 'metadata' object, which must contain these fields: 'userAgent', 'userIp' and 'language'.

Python

import starkbank
from starkbank import merchantsession

purchase = merchantsession.Purchase(
            amount=5000,
            installment_count=1,
            card_expiration="2035-01",
            card_number="5448280000000007",
            card_security_code="123",
            holder_name="Margaery Tyrell",
            funding_type="credit",
            billing_city="Sao Paulo",
            billing_country_code="BRA",
            billing_state_code="SP",
            billing_street_line_1="Rua do Jardim de cima, 123",
            billing_street_line_2="1 andar",
            billing_zip_code="11111-111",
            holder_email="margaery.tyrell@email.com",
            holder_phone="11998663456",
            metadata={
                "userAgent": "userAgent",
                "userIp": "255.255.255.255",
                "language": "pt-BR",
                "timezoneOffset": 3,
                "extraData": "extraData"
            },
            tags=[]
        )

purchase_response = starkbank.merchantsession.purchase(
    uuid="9ebe95f651054f13a98d977a89b48418",
    purchase=purchase
)

print(purchase_response)

Javascript

(async() => {
    let merchantPurchase = await starkbank.merchantSession.purchase(
        uuid="9ebe95f651054f13a98d977a89b48418",
        {
            amount: 5000,
            installmentCount: 1,
            holderEmail: "margaery.tyrell@email.com",
            holderPhone: "11998663456",
            holderName: "Margaery Tyrell",
            fundingType: "credit",
            billingCountryCode: "BRA",
            billingCity: "Sao Paulo",
            billingStateCode: "SP",
            billingStreetLine1: "Rua do Jardim de cima, 123",
            billingStreetLine2: "1 andar",
            billingZipCode: "11111-111",
            billingCountryCode: "BRA",
            metadata: {
                userAgent: "userAgent",
                userIp: "255.255.255.255",
                language: "pt-BR",
                timezoneOffset: 3,
                extraData: "extraData"
            },
            cardExpiration: "2035-01",
            cardNumber: "5448280000000007",
            cardSecurityCode: "123"
        }
    );

    console.log(merchantPurchase)  
})();

PHP

use StarkBankMerchantSessionPurchase;

$purchase = new MerchantSessionPurchase([
        'amount' => 10000,
        'installmentCount' => 5,
        'holderName' => "Marjorie Tyrell",
        'holderEmail' => "margaery.tyrell@starkbank.com",
        'holderPhone' => "11998663456",
        'fundingType' => "credit",
        'billingCountryCode' => "BRA",
        'billingCity' => "Sao Paulo",
        'billingState_code' => "SP",
        'billingStreetLine1' => "Rua do Jardim de cima, 123",
        'billingStreetLine2' => "1 andar",
        'billingZipCode' => "01450-000",
        'metadata' => [
            'userAgent' => "Mozilla",
            'userIp' => "255.255.255.255",
            'language' => "pt-BR",
            'timezoneOffset' => 3,
            'extraData' => "extraData"
        ],
        [tags] => Array
        (
        )
        'cardExpiration' => "2035-01",
        'cardNumber' => "5448280000000007",
        'cardSecurityCode' => "123"
    ]);

$merchantSessionPurchase = MerchantSession::purchase(
    "9ebe95f651054f13a98d977a89b48418",
    $purchase
);

print_r($merchantSessionPurchase);

Java

import com.starkbank.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Map<String, Object> purchaseData = new HashMap<>();
purchaseData.put("amount", 5000L);
purchaseData.put("cardExpiration", "2035-01");
purchaseData.put("cardNumber", "5448280000000007");
purchaseData.put("cardSecurityCode", "123");
purchaseData.put("holderName", "Margaery Tyrell");
purchaseData.put("holderEmail", "margaery.tyrell@starkbank.com");
purchaseData.put("holderPhone", "11998663456");
purchaseData.put("fundingType", "credit");
purchaseData.put("billingCountryCode", "BRA");
purchaseData.put("billingCity", "Sao Paulo");
purchaseData.put("billingStateCode", "SP");
purchaseData.put("billingStreetLine1", "Rua do Jardim de cima, 123");
purchaseData.put("billingStreetLine2", "1 andar");
purchaseData.put("billingZipCode", "11111-111");

Map<String, Object> metadata = new HashMap<>();
metadata.put("userAgent", "userAgent");
metadata.put("userIp", "255.255.255.255");
metadata.put("language", "pt-BR");
metadata.put("timezoneOffset", 3);
metadata.put("extraData", "extraData");

purchaseData.put("metadata", metadata);

MerchantSession.Purchase purchaseResponse = MerchantSession.purchase(
        "9ebe95f651054f13a98d977a89b48418", new MerchantSession.Purchase(purchaseData));

System.out.println(purchaseResponse);

Ruby

require 'starkbank'

metadata = {
    userAgent: "userAgent",
    userIp: "255.255.255.255",
    language: "pt-BR",
    timezoneOffset: 3,
    extraData: "extraData"
}

purchase_data = {
    amount: 5000,
    installment_count: 1,
    card_expiration: "2035-01",
    card_number: "5448280000000007",
    card_security_code: "123",
    holder_name: "Margaery Tyrell",
    funding_type: "credit",
    billing_city: "Sao Paulo",
    billing_country_code: "BRA",
    billing_state_code: "SP",
    billing_street_line_1: "Rua do Jardim de cima, 123",
    billing_street_line_2: "1 andar",
    billing_zip_code: "11111-111",
    holder_email: "margaery.tyrell@email.com",
    holder_phone: "11998663456",
    metadata: metadata,
}

response = StarkBank::MerchantSession.purchase(
    uuid: "9ebe95f651054f13a98d977a89b48418",
    payload: purchase_data
)

puts response

Elixir

purchase = StarkBank.MerchantSession.purchase!([
    uuid: "9ebe95f651054f13a98d977a89b48418",
    %StarkBank.MerchantSession.Purchase{
        amount: 5000,
        installment_count: 1,
        holder_email: "margaery.tyrell@email.com",
        holder_phone: "11985923451",
        holder_name: "Margaery Tyrell",
        funding_type: "credit",
        billing_country_code: "BRA",
        billing_city: "Sao Paulo",
        billing_state_code: "SP",
        billing_street_line_1: "Rua do Jardim de cima, 123",
        billing_street_line_2: "1 andar",
        billing_zip_code: "11111-111",
        metadata: %{
            userAgent: "userAgent",
            userIp: "255.255.255.255",
            language: "pt-BR",
            timezoneOffset: 3,
            extraData: "extraData"
        },
        card_expiration: "2035-01",
        card_number: "5448280000000007",
        card_security_code: "123"
    }
])

C#

using StarkBank;
using StarkBank.MerchantPurchase;
using System;

MerchantSession.Purchase merchantSessionPurchase = MerchantSession.PostPurchase(
    "04d3b4c702804510b7442ca87f3d854d",
    new MerchantSession.Purchase(
        amount: 5000,
        installmentCount: 1,
        cardExpiration: "2035-01",
        cardNumber: "5448280000000007",
        cardSecurityCode: "123",
        holderName: "Margaery Tyrell",
        fundingType: "credit",
        billingCity: "Sao Paulo",
        billingCountryCode: "BRA",
        billingStateCode: "SP",
        billingStreetLine1: "Rua do Jardim de cima, 123",
        billingStreetLine2: "1 andar",
        billingZipCode: "11111-111",
        holderEmail: "margaery.tyrell@email.com",
        holderPhone: "11998663456",
        metadata: new Dictionary<string, object>
        {
            { "userAgent", "userAgent" },
            { "userIp", "255.255.255.255" },
            { "language", "pt-BR" },
            { "timezoneOffset", 3 },
            { "extraData", "extraData" }
        }
    )
);

Console.WriteLine(merchantSessionPurchase);

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantSession "github.com/starkbank/sdk-go/starkbank/merchant/session"
    Purchase "github.com/starkbank/sdk-go/starkbank/merchant/session"

)

func main() {
    purchase := Purchase.Purchase{
        Amount:            5000,
        InstallmentCount:  1,
        HolderName:        "Margaery Tyrell",
        HolderEmail:       "margaery.tyrell@starkbank.com",
        HolderPhone:       "11998663456",
        FundingType:       "credit",
        BillingCountryCode: "BRA",
        BillingCity:       "Sao Paulo",
        BillingStateCode:  "SP",
        BillingStreetLine1: "Rua do Jardim de cima, 123",
        BillingStreetLine2: "1 andar",
        BillingZipCode:    "11111-111",
        Metadata: map[string]interface{}{
            "userAgent":      "Mozilla",
            "userIp":         "255.255.255.255",
            "language":       "pt-BR",
            "timezoneOffset": 3,
            "extraData":      "extraData",
        },
        CardExpiration: "2035-01",
        CardNumber: "5277696455399733",
        CardSecurityCode: "123",
    }

    createdPurchase, err := MerchantSession.PostPurchase("9ebe95f651054f13a98d977a89b48418", purchase, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdPurchase)
}

Clojure

(defn create-purchase []
  (let [metadata {:userAgent "userAgent"
                  :userIp "255.255.255.255"
                  :language "pt-BR"
                  :timezoneOffset 3
                  :extraData "extraData"}
        merchant-purchase (merchant-session/purchase {:uuid  "b6c0ff6039674b28a2cab51a355bd6a0",
                                                     (:amount 10000
                                                     :installment-count 5
                                                     :holder-email "holdeName@email.com"
                                                     :holder-phone "11111111111"
                                                     :funding-type "credit"
                                                     :billing-country-code "BRA"
                                                     :billing-city "Sao Paulo"
                                                     :billing-state-code "SP"
                                                     :billing-street-line-1 "Rua do Holder Name, 123"
                                                     :billing-street-line-2 "1 andar"
                                                     :billing-zip-code "01450-000"
                                                     :metadata metadata
                                                     :card-expiration "2035-01",
                                                     :card-number "5277696455399733",
                                                     :card-security-code "123")})]
    (println merchant-purchase)))

(create-purchase)

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session/:sessionUuid/purchase' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "amount": 5000,
    "cardExpiration": "2035-01",
    "cardNumber": "5448280000000007",
    "cardSecurityCode": "123",
    "holderName": "Margaery Tyrell",
    "fundingType": "credit",
    "billingCity": "Sao Paulo",
    "billingCountryCode": "BRA",
    "billingStateCode": "SP",
    "billingStreetLine1": "Rua do Jardim de cima, 123",
    "billingStreetLine2": "1 andar",
    "billingZipCode": "11111-111",
    "holderEmail": "margaery.tyrell@email.com",
    "holderPhone": "11998663456",
    "metadata": {
        "userAgent": "userAgent",
        "userIp": "255.255.255.255",
        "language": "pt-BR",
        "timezoneOffset": 3,
        "extraData": "extraData"
    },
    "tags": [
        "session_123"
    ]
}'
RESPONSE

Python

Purchase(
	amount=5000,
	billing_city=Sao Paulo,
	billing_country_code=BRA,
	billing_state_code=SP,
	billing_street_line_1=Rua do Jardim de cima, 123,
	billing_street_line_2=1 andar,
	billing_zip_code=11111-111,
	card_ending=0007,
	card_id=,
	challenge_mode=enabled,
	challenge_url=https://sandbox.api.starkinfra.com/v2/acquiring-purchase/5295123562758144/challenge,
	created=2025-02-20 21:06:12.951771,
	currency_code=BRL,
	end_to_end_id=04dcb1e9-7898-4b23-9e30-ac412727ffe3,
	fee=0,
	funding_type=credit,
	holder_email=margaery.tyrell@email.com,
	holder_name=Margaery Tyrell,
	holder_phone=11998663456,
	id=6213561541984256,
	installment_count=1,
	metadata={
        'extraData': 'extraData', 
        'language': 'pt-BR', 
        'screenHeight': 500, 
        'screenWidth': 500, 
        'timezoneOffset': 3, 
        'userAgent': 'userAgent', 
        'userIp': '255.255.255.255'
    },
	network=mastercard,
	source=merchant-session/4922944740392960,
	status=pending,
	tags=['session_123'],
	updated=2025-02-20 21:06:14.002423
)

Javascript

Purchase {
    id: '5436825296437248',
    amount: 5000,
    installmentCount: 1,
    holderName: 'Margaery Tyrell',
    holderEmail: 'margaery.tyrell@email.com',
    holderPhone: '11998663456',
    fundingType: 'credit',
    billingCountryCode: 'BRA',
    billingCity: 'Sao Paulo',
    billingStateCode: 'SP',
    billingStreetLine1: 'Rua do Jardim de cima, 123',
    billingStreetLine2: '1 andar',
    billingZipCode: '11111-111',
    metadata: {
        extraData: 'extraData',
        language: 'pt-BR',
        screenHeight: 500,
        screenWidth: 500,
        timezoneOffset: 3,
        userAgent: 'userAgent',
        userIp: '255.255.255.255'
    },
    cardId: '',
    cardEnding: '0007',
    challengeMode: 'enabled',
    challengeUrl: 'https://sandbox.api.starkinfra.com/v2/acquiring-purchase/5226710773530624/challenge',
    created: '2025-02-21T06:41:59.641430+00:00',
    currencyCode: 'BRL',
    endToEndId: '4c95dcba-8beb-42db-8993-da47d23fa104',
    fee: 0,
    network: 'mastercard',
    source: 'merchant-session/5637285756272640',
    status: 'approved',
    tags: ['session_123'],
    updated: '2025-02-21T05:33:07.511589+00:00'
}

PHP

StarkBankMerchantSessionPurchase Object
(
    [id] => 5630382401650688
    [installmentCount] => 2
    [amount] => 120
    [holderName] => Marjorie Tyrell
    [holderEmail] => margaery.tyrell@starkbank.com
    [holderPhone] => 11998663456
    [fundingType] => credit
    [billingCountryCode] => BRA
    [billingCity] => Sao Paulo
    [billingStateCode] => SP
    [billingStreetLine1] => Rua do Jardim de cima, 123
    [billingStreetLine2] => 1 andar
    [billingZipCode] => 01450-000
    [metadata] => Array
        (
            [screenHeight] => 500
            [screenWidth] => 500
            [extraData] => extraData
            [language] => pt-BR
            [timezoneOffset] => 3
            [userAgent] => Mozilla
            [userIp] => 255.255.255.255
        )

    [cardEnding] => 0007
    [cardId] => 5720800615202816
    [challengeMode] => enabled
    [challengeUrl] => 
    [created] => DateTime Object
        (
            [date] => 2025-02-21 05:22:58.349672
            [timezone_type] => 1
            [timezone] => +00:00
        )

    [currencyCode] => BRL
    [endToEndId] => 8abf73d2-1ddb-41b6-8feb-a9f39b5e3019
    [fee] => 0
    [network] => mastercard
    [source] => merchant-session/5769983065849856
    [status] => approved
    [tags] => Array
        (
            [0] => session_123
        )

    [updated] => DateTime Object
        (
            [date] => 2025-02-21 05:23:00.996062
            [timezone_type] => 1
            [timezone] => +00:00
        )

)

Java

Purchase({
  "amount": 5000,
  "installmentCount": 1,
  "cardId": "",
  "holderName": "Margaery Tyrell",
  "holderEmail": "margaery.tyrell@starkbank.com",
  "holderPhone": "11998663456",
  "fundingType": "credit",
  "billingCountryCode": "BRA",
  "billingCity": "Sao Paulo",
  "billingStateCode": "SP",
  "billingStreetLine1": "Rua do Jardim de cima, 123",
  "billingStreetLine2": "1 andar",
  "billingZipCode": "11111-111",
  "metadata": {
    "extraData": "extraData",
    "language": "pt-BR",
    "screenHeight": 500.0,
    "screenWidth": 500.0,
    "timezoneOffset": 3.0,
    "userAgent": "userAgent",
    "userIp": "255.255.255.255"
  },
  "network": "mastercard",
  "source": "merchant-session/5436527777677312",
  "status": "pending",
  "tags": [
    "session_123"
  ],
  "id": "5726575509110784"
})

Ruby

purchase(
    id: 6401017042173952,
    amount: 5000,
    holder_name: Margaery Tyrell,
    funding_type: credit,
    holder_email: margaery.tyrell@email.com,
    holder_phone: 11998663456,
    installment_count: 1,
    billing_country_code: BRA,
    billing_city: Sao Paulo,
    billing_state_code: SP,
    billing_street_line_1: Rua do Jardim de cima, 123,
    billing_street_line_2: 1 andar,
    billing_zip_code: 11111-111,
    metadata: {"extraData"=>"extraData", "language"=>"pt-BR", "screenHeight"=>500, "screenWidth"=>500, "timezoneOffSet"=>3, "timezoneOffset"=>3, "userAgent"=>"userAgent", "userIp"=>"255.255.255.255"},
    card_ending: 0007,
    card_id: ,
    challenge_mode: enabled,
    challenge_url: https://sandbox.api.starkinfra.com/v2/acquiring-purchase/5058805092057088/challenge,
    created: 2025-02-21T06:44:21+00:00,
    currency_code: BRL,
    end_to_end_id: b52cc5e4-326d-48f1-9bfb-8e83c9312698,
    fee: 0,
    network: mastercard,
    source: merchant-session/5706278055706624,
    status: pending,
    tags: ["yourtags"],
    updated: 2025-02-21T06:44:22+00:00
)

Elixir

%StarkBank.MerchantPurchase{
    amount: 5000,
    billing_city: "Sao Paulo",
    billing_country_code: "BRA",
    billing_state_code: "SP",
    billing_street_line_1: "Rua do Jardim de cima, 123",
    billing_street_line_2: "1 andar",
    billing_zip_code: "01450-000",
    card_ending: "9733",
    card_id: "",
    challenge_mode: "enabled",
    challenge_url: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    created: ~U[2025-01-30 18:39:52.136626Z],
    currency_code: "BRL",
    end_to_end_id: "00372f52-52c8-4907-b03b-3946cacae4e3",
    fee: 0,
    funding_type: "credit",
    holder_email: "margaery.tyrell@email.com",
    holder_name: "Margaery Tyrell",
    holder_phone: "11999999999",
    id: "5693253768708096",
    installment_count: 1,
    metadata: %{
        language: "pt-BR",
        screenHeight: 500,
        screenWidth: 500,
        timezoneOffset: 3,
        userAgent: "userAgent",
        userIp: "255.255.255.255",
        extraData: "extraData"
    },
    network: "mastercard",
    source: "merchant-session/5674419263373312",
    status: "pending",
    tags: ["session_123"],
    updated: ~U[2025-01-30 18:39:54.029416Z]
}

C#

Purchase(
    Amount: 5000,
    InstallmentCount: 1,
    CardId: ,
    HolderName: Margaery Tyrell,
    HolderEmail: margaery.tyrell@email.com,
    HolderPhone: 11998663456,
    FundingType: credit,
    BillingCountryCode: BRA,
    BillingCity: Sao Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Jardim de cima, 123,
    BillingStreetLine2: 1 andar,
    BillingZipCode: 11111-111,
    Metadata: {
        { "userAgent", "userAgent" },
        { "userIp", "255.255.255.255" },
        { "language", "pt-BR" },
        { "timezoneOffset", 3 },
        { "extraData", "extraData" },
        { "screenHeight", 500 },
        { "screenWidth", 500 }
    },
    CardEnding: 0007,
    ChallengeMode: enabled,
    ChallengeUrl: https://sandbox.api.starkinfra.com/v2/acquiring-purchase/6734959028994048/challenge,
    Created: 2/21/2025 3:47:24 AM,
    CurrencyCode: BRL,
    EndToEndId: dd4c0e93-0cd9-4fd4-9362-27db12e90244,
    Fee: 0,
    Network: "mastercard",
    Source: "merchant-session/5702364979789824",
    Status: "denied",
    Tags: ["session_123"],
    Updated: "2/21/2025 3:22:48 AM"
    ID: 5269178671955968
)

Go

{
    Id: "5693253768708096"
    Amount: 5000
    BillingCity: "Sao Paulo"
    BillingCountryCode: "BRA"
    BillingStateCode: "SP"
    BillingStreetLine1: "Rua do Jardim de cima, 123"
    BillingStreetLine2: "1 andar"
    BillingZipCode: "11111-111"
    CardEnding: "9733"
    CardId: ""
    ChallengeMode: "enabled"
    ChallengeUrl: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge"
    Created: "2025-01-30 18:39:52.136626 +0000 +0000"
    CurrencyCode: "BRL"
    EndToEndId: "00372f52-52c8-4907-b03b-3946cacae4e3"
    Fee: 0
    FundingType: "credit"
    HolderEmail: "margaery.tyrell@starkbank.com"
    HolderName: "Margaery Tyrell"
    HolderPhone: "11998663456"
    InstallmentCount: 1
    Metadata: {
        Language: "pt-BR"
        ScreenHeight: 500
        ScreenWidth: 500
        TimezoneOffset: 3
        UserAgent: "userAgent"
        UserIp: "111.111.111.111"
        extraData: "extraData"
    },
    Network: "mastercard"
    Source: "merchant-session/5674419263373312"
    Status: "pending"
    Tags: ["session_123"]
    Updated: "2025-01-30 18:39:54.029416 +0000 +0000"
}

Clojure

{:id "5693253768708096",
 :amount 5000,
 :billing-city "Sao Paulo",
 :billing-country-code "BRA",
 :billing-state-code "SP",
 :billing-street-line-1 "Rua do Jardim de cima, 123",
 :billing-street-line-2 "1 andar",
 :billing-zip-code "11111-111",
 :card-ending "0007",
 :card-id "",
 :challenge-mode "enabled",
 :challenge-url "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
 :created "2025-01-30T18:39:52.136626+00:00",
 :currency-code "BRL",
 :end-to-end-id "00372f52-52c8-4907-b03b-3946cacae4e3",
 :fee 0,
 :funding-type "credit",
 :holder-email "margaery.tyrell@email.com",
 :holder-name "Margaery Tyrell",
 :holder-phone "11999999999",
 :installment-count 1,
 :metadata {:language "pt-BR",
            :screen-height 500,
            :screen-width 500,
            :timezone-offset 3,
            :user-agent "userAgent",
            :user-ip "255.255.255.255"},
 :network "mastercard",
 :source "merchant-session/5674419263373312",
 :status "pending",
 :tags ["session_123"],
 :updated "2025-01-30T18:39:54.029416+00:00"}

Curl

{
    "message": "Merchant Purchase successfully created",
    "purchase": {
        "amount": 5000,
        "billingCity": "Sao Paulo",
        "billingCountryCode": "BRA",
        "billingStateCode": "SP",
        "billingStreetLine1": "Rua do Jardim de cima, 123",
        "billingStreetLine2": "1 andar",
        "billingZipCode": "11111-111",
        "cardEnding": "0007",
        "cardId": "",
        "challengeMode": "enabled",
        "challengeUrl": "https://sandbox.api.starkinfra.com/v2/acquiring-purchase/6229081406308352/challenge",
        "created": "2025-02-20T20:22:00.898733+00:00",
        "currencyCode": "BRL",
        "endToEndId": "ccb3aab2-1f77-4441-ae53-46aedabfd5d9",
        "fee": 0,
        "fundingType": "credit",
        "holderEmail": "margaery.tyrell@email.com",
        "holderName": "Margaery Tyrell",
        "holderPhone": "11998663456",
        "id": "4573325250527232",
        "installmentCount": 1,
        "metadata": {
            "extraData": "extraData",
            "language": "pt-BR",
            "screenHeight": 500,
            "screenWidth": 500,
            "timezoneOffset": 3,
            "userAgent": "userAgent",
            "userIp": "255.255.255.255"
        },
        "network": "mastercard",
        "source": "merchant-session/6404043744215040",
        "status": "pending",
        "tags": [
            "session_123"
        ],
        "updated": "2025-02-20T20:22:02.221685+00:00"
    }
}

Creating a Zero Dollar Merchant Purchase via Session

After creating a zero dollar Merchant Session, you can create a purchase using the UUID generated in the session through a public route. This transaction does not need to go through your backend.

To create a zero dollar merchant purchase, you only need to set the field 'amount' to '0'.

Python

import starkbank

purchase = starkbank.merchantsession.Purchase(
    amount=0,
    installment_count=1,
    card_expiration="2035-01",
    card_number="5448280000000007",
    card_security_code="123",
    holder_name="Tywin Lannister",
    funding_type="credit"
)      

merchant_session_purchase = starkbank.merchantsession.purchase(
    uuid="c1229dc3a50647fab780bf8e5c1c9b54",
    purchase=purchase
)  
    
print(merchant_session_purchase)

Javascript

const starkbank = require('starkbank');

(async() => {
    let purchase = {
        amount: 0,
        installmentCount: 1,
        cardExpiration: "2035-01",
        cardNumber: "5448280000000007",
        cardSecurityCode: "123",
        holderName: "Tywin Lannister",
        fundingType: "credit"
    };

    let merchantSessionPurchase = await starkbank.merchantSession.purchase(
        "c1229dc3a50647fab780bf8e5c1c9b54",
        purchase
    );

    console.log(merchantSessionPurchase);     
})();       

PHP

use StarkBank\MerchantSession;

$purchase = new MerchantSession\Purchase([
    'amount' => 0,
    'installmentCount' => 1,
    'cardExpiration' => "2035-01",
    'cardNumber' => "5448280000000007",
    'cardSecurityCode' => "123",
    'holderName' => "Tywin Lannister",
    'fundingType' => "credit"
  ]);

$merchantSessionPurchase = MerchantSession::purchase(
    "c1229dc3a50647fab780bf8e5c1c9b54",
    $purchase
);

print_r($merchantSessionPurchase);           

Java

import com.starkbank.*;
import java.util.HashMap;
import java.util.Map;

Map<String, Object> purchaseData = new HashMap<>();
purchaseData.put("amount", 0);
purchaseData.put("installmentCount", 1);
purchaseData.put("cardExpiration", "2035-01");
purchaseData.put("cardNumber", "5448280000000007");
purchaseData.put("cardSecurityCode", "123");
purchaseData.put("holderName", "Tywin Lannister");
purchaseData.put("fundingType", "credit");
purchaseData.put("challengeMode", "disabled");


MerchantSession.Purchase merchantSessionPurchase = MerchantSession.purchase("c1229dc3a50647fab780bf8e5c1c9b54", new MerchantSession.Purchase(purchaseData));

System.out.println(merchantSessionPurchase);            

Ruby

require 'starkbank'

purchase_data = {
    amount: 0,
    installment_count: 1,
    card_expiration: "2035-01",
    card_number: "5448280000000007",
    card_security_code: "123",
    holder_name: "Tywin Lannister",
    funding_type: "credit",
}

response = StarkBank::MerchantSession.purchase(
    uuid: "c1229dc3a50647fab780bf8e5c1c9b54",
    payload: purchase_data
)

puts response      

Elixir

purchase = StarkBank.MerchantSession.purchase!([
    uuid: "c1229dc3a50647fab780bf8e5c1c9b54",
    %StarkBank.MerchantSession.Purchase{
        amount: 0,
        installment_count: 1,
        card_expiration: "2035-01",
        card_number: "5448280000000007",
        card_security_code: "123",
        holder_name: "Tywin Lannister",
        funding_type: "credit",
        challenge_mode: "disabled"
    }
])          
IO.inspect(purchase)        

C#

using StarkBank;
using StarkBank.MerchantPurchase;


MerchantSession.Purchase purchaseExample = new MerchantSession.Purchase(
        amount: 0,
        installmentCount: 1,
        cardExpiration: "2035-01",
        cardNumber: "5102589999999954",
        cardSecurityCode: "123",
        holderName: "Holder Name",
        holderEmail: "holdeName@email.com",
        holderPhone: "11111111111",
        fundingType: "credit",
        billingCountryCode: "BRA",
        billingCity: "São Paulo",
        billingStateCode: "SP",
        billingStreetLine1: "Rua do Holder Name, 123",
        billingStreetLine2: "",
        billingZipCode: "11111-111",
        metadata: new Dictionary<string, object>
        {
            { "userAgent", "Postman" },
            { "userIp", "255.255.255.255" },
            { "language", "pt-BR" },
            { "timezoneOffset", 3 },
            { "extraData", "extraData" }
        }
    );

MerchantSession.Purchase purchase = MerchantSession.PostPurchase(id: "c1229dc3a50647fab780bf8e5c1c9b54", purchaseExample);

Console.WriteLine(purchase);

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantSession "github.com/starkbank/sdk-go/starkbank/merchant/session"
    Purchase "github.com/starkbank/sdk-go/starkbank/merchant/session"
)

func main() {
    purchase := Purchase.Purchase{
        Amount:           0,
        InstallmentCount: 1,
        CardExpiration:   "2035-01",
        CardNumber:       "5448280000000007",
        CardSecurityCode: "123",
        HolderName:       "Tywin Lannister",
        FundingType:      "credit",
        ChallengeMode     "disabled",
    }

    createdPurchase, err := MerchantSession.PostPurchase("c1229dc3a50647fab780bf8e5c1c9b54", purchase, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdPurchase)
}       

Clojure

(defn create-purchase []
  (let [merchant-session-purchase (merchant-session/purchase (:uuid "c1229dc3a50647fab780bf8e5c1c9b54"
                                                      {:amount 0
                                                      :installment_count 1
                                                      :card_expiration "2035-01"
                                                      :card_number "5448280000000007"
                                                      :card_security_code "123"
                                                      :holder_name "Tywin Lannister"
                                                      :challenge_mode "disabled"
                                                      :funding_type "credit"}))]
    (println merchant-session-purchase)))

(create-purchase)        

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-session/:sessionUuid/purchase' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "amount": 0,
    "installmentCount": 1,
    "cardExpiration": "2035-01",
    "cardNumber": "5448280000000007",
    "cardSecurityCode": "123",
    "holderName": "Tywin Lannister",
    "fundingType": "credit"
}
'
RESPONSE

Python

Purchase(
    amount=0,
    billing_city=,
    billing_country_code=,
    billing_state_code=,
    billing_street_line_1=,
    billing_street_line_2=,
    billing_zip_code=,
    card_ending=0007,
    card_id=5720800615202816,
    challenge_mode=disabled,
    challenge_url=,
    created=2025-02-20 22:32:48.049049,
    currency_code=BRL,
    end_to_end_id=be3f7ed3-d3f1-40d1-aa22-9c664656e67d,
    fee=0,
    funding_type=credit,
    holder_email=,
    holder_name=Tywin Lannister,
    holder_phone=,
    id=6684387575857152,
    installment_count=1,
    metadata={},
    network=mastercard,
    source=merchant-session/6722046587305984,
    status=approved,
    tags=['session_123'],
    updated=2025-02-20 22:32:49.689550
)

Javascript

Purchase {
  id: '4994997447294976',
  amount: 0,
  installmentCount: 1,
  holderName: 'Tywin Lannister',
  holderEmail: '',
  holderPhone: '',
  fundingType: 'credit',
  billingCountryCode: '',
  billingCity: '',
  billingStateCode: '',
  billingStreetLine1: '',
  billingStreetLine2: '',
  billingZipCode: '',
  metadata: {},
  cardId: '5720800615202816',
  cardEnding: '0007',
  challengeMode: 'disabled',
  challengeUrl: '',
  created: '2025-02-20T20:06:16.211269+00:00',
  currencyCode: 'BRL',
  endToEndId: '341d99d8-28c8-46db-aaf6-f4593cc77945',
  fee: 0,
  network: 'mastercard',
  source: 'merchant-session/5365764458545152',
  status: 'approved',
  tags: [ 'session_123' ],
  updated: '2025-02-20T20:06:17.380503+00:00'
}     

PHP

StarkBank\MerchantSession\Purchase Object
(
    [id] => 4789938637766656
    [amount] => 0
    [billingCity] => 
    [billingCountryCode] => 
    [billingStateCode] => 
    [billingStreetLine1] => 
    [billingStreetLine2] => 
    [billingZipCode] => 
    [cardEnding] => 0007
    [cardId] => 6308984843665408
    [challengeMode] => disabled
    [challengeUrl] => 
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:44:07.988276
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [currencyCode] => BRL
    [endToEndId] => 05edc924-a277-4717-a6be-70ce9ec6b428
    [fee] => 0
    [fundingType] => credit
    [holderEmail] => 
    [holderName] => Tywin Lannister
    [holderPhone] => 
    [installmentCount] => 1
    [metadata] => Array
        (
        )
    [network] => mastercard
    [source] => merchant-session/5539375022604288
    [status] => approved
    [tags] => Array
        (
            [0] => purchase_1234
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:44:10.281456
            [timezone_type] => 1
            [timezone] => +00:00
        )
)      

Java

Purchase({
    "id": "4789938637766656",
    "amount": 0,
    "billingCity": "",
    "billingCountryCode": "",
    "billingStateCode": "",
    "billingStreetLine1": "",
    "billingStreetLine2": "",
    "billingZipCode": "",
    "cardId": "6308984843665408",
    "cardEnding": "0007",
    "challengeMode": "disabled",
    "challengeUrl": "",
    "created": "2025-01-30T18:44:07.988276+00:00",
    "currencyCode": "BRL",
    "endToEndId": "05edc924-a277-4717-a6be-70ce9ec6b428",
    "fee": 0,
    "fundingType": "credit",
    "holderEmail": "",
    "holderName": "Tywin Lannister",
    "holderPhone": "",
    "installmentCount": 1,
    "metadata": {},
    "network": "mastercard",
    "source": "merchant-session/5539375022604288",
    "status": "approved",
    "tags": ["purchase_1234"],
    "updated": "2025-01-30T18:44:10.281456+00:00"
})      

Ruby

purchase(
    id: 6172318623596544,
    amount: 0,
    holder_name: Tywin Lannister,
    funding_type: credit,
    holder_email: ,
    holder_phone: ,
    installment_count: 1,
    billing_country_code: ,
    billing_city: ,
    billing_state_code: ,
    billing_street_line_1: ,
    billing_street_line_2: ,
    billing_zip_code: ,
    metadata: {},
    card_ending: 0007,
    card_id: 5720800615202816,
    challenge_mode: disabled,
    challenge_url: ,
    created: 2025-02-20T22:01:00+00:00,
    currency_code: BRL,
    end_to_end_id: 43bd8681-9074-4e8d-8216-2bcbff4b8022,
    fee: 0,
    network: mastercard,
    source: merchant-session/5062295960944640,
    status: approved,
    tags: ["session_123"],
    updated: 2025-02-20T22:01:01+00:00
)      

Elixir

%StarkBank.MerchantSession.Purchase{
    id: "4789938637766656",
    amount: 0,
    billing_city: "",
    billing_country_code: "",
    billing_state_code: "",
    billing_street_line_1: "",
    billing_street_line_2: "",
    billing_zip_code: "",
    card_id: "6308984843665408",
    card_ending: "0007",
    challenge_mode: "disabled",
    challenge_url: "",
    created: ~U[2025-01-30 18:44:07.988276Z],
    currency_code: "BRL",
    end_to_end_id: "05edc924-a277-4717-a6be-70ce9ec6b428",
    fee: 0,
    funding_type: "credit",
    holder_email: "",
    holder_name: "Tywin Lannister",
    holder_phone: "",
    installment_count: 1,
    metadata: %{},
    network: "mastercard",
    source: "merchant-session/5539375022604288",
    status: "approved",
    tags: ["purchase_1234"],
    updated: ~U[2025-01-30 18:44:10.281456Z]
}      

C#

Purchase(
    Amount: 0,
    InstallmentCount: 1,
    CardId: ,
    HolderName: Holder Name,
    HolderEmail: holdeName@email.com,
    HolderPhone: 11111111111,
    FundingType: credit,
    BillingCountryCode: BRA,
    BillingCity: São Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Holder Name, 123,
    BillingStreetLine2: ,
    BillingZipCode: 11111-111,
    Metadata: {
        { "userAgent", "Postman" },
        { "userIp", "255.255.255.255" },
        { "language", "pt-BR" },
        { "timezoneOffset", 3 },
        { "extraData", "extraData" }
    },
    CardEnding: 9954,
    ChallengeMode: "enabled",
    ChallengeUrl: "",
    Created: "2/21/2025 3:22:46 AM",
    CurrencyCode: "BRL",
    EndToEndId: "26d189cb-a836-4541-b338-f0621c5e6347",
    Fee: 0,
    Network: "mastercard",
    Source: "merchant-session/6725697133346816",
    Status: "denied",
    Tags: ["yourtags"],
    Updated: "2/21/2025 3:22:48 AM"
    ID: 6198510365966336
)

Go

{
    Id: "4789938637766656"
    Amount: 0
    BillingCity: ""
    BillingCountryCode: ""
    BillingStateCode: ""
    BillingStreetLine1: ""
    BillingStreetLine2: ""
    BillingZipCode: ""
    CardEnding: "0007"
    CardId: "6308984843665408"
    ChallengeMode: "disabled"
    ChallengeUrl: ""
    Created: "2025-01-30 18:44:07.988276 +0000 +0000"
    CurrencyCode: "BRL"
    EndToEndId: "05edc924-a277-4717-a6be-70ce9ec6b428"
    Fee: 0
    FundingType: "credit"
    HolderEmail: ""
    HolderName: "Tywin Lannister"
    HolderPhone: ""
    InstallmentCount: 1
    Metadata: {
        Language: ""
        ScreenHeight: 0
        ScreenWidth: 0
        TimezoneOffset: 0
        UserAgent: ""
        UserIp: ""
    },
    Network: "mastercard"
    Source: "merchant-session/5539375022604288"
    Status: "approved"
    Tags: ["purchase_1234"]
    Updated: "2025-01-30 18:44:10.281456 +0000 +0000"
}

Clojure

{:id "4789938637766656",
 :amount 0,
 :billing-city "",
 :billing-country-code "",
 :billing-state-code "",
 :billing-street-line1 "",
 :billing-street-line2 "",
 :billing-zip-code "",
 :card-ending "0007",
 :card-id "6308984843665408",
 :challenge-mode "disabled",
 :challenge-url "",
 :created "2025-01-30T18:44:07.988276+00:00",
 :currency-code "BRL",
 :end-to-end-id "05edc924-a277-4717-a6be-70ce9ec6b428",
 :fee 0,
 :funding-type "credit",
 :holder-email "",
 :holder-name "Tywin Lannister",
 :holder-phone "",
 :installment-count 1,
 :metadata {},
 :network "mastercard",
 :source "merchant-session/5539375022604288",
 :status "approved",
 :tags ["purchase_1234"],
 :updated "2025-01-30T18:44:10.281456+00:00"}      

Curl

{
    "message": "Merchant Purchase successfully created",
    "purchase": {
        "amount": 0,
        "billingCity": "",
        "billingCountryCode": "",
        "billingStateCode": "",
        "billingStreetLine1": "",
        "billingStreetLine2": "",
        "billingZipCode": "",
        "cardEnding": "0007",
        "cardId": "6308984843665408",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2025-01-30T18:44:07.988276+00:00",
        "currencyCode": "BRL",
        "endToEndId": "05edc924-a277-4717-a6be-70ce9ec6b428",
        "fee": 0,
        "fundingType": "credit",
        "holderEmail": "",
        "holderName": "Tywin Lannister",
        "holderPhone": "",
        "id": "4789938637766656",
        "installmentCount": 1,
        "metadata": {},
        "network": "mastercard",
        "source": "merchant-session/5539375022604288",
        "status": "approved",
        "tags": [
            "purchase_1234"
        ],
        "updated": "2025-01-30T18:44:10.281456+00:00"
    }
}

Creating a Merchant Purchase via API

To create a purchase directly from your server, use the POST /merchant-purchase endpoint with a Merchant Card ID for recurring charges.

For this integration, you must already have an approved purchase with this card. After the purchase is approved, an entity called Merchant Card is generated and you can use it for recurring purchases.

The only field you need from the Merchant Card is its ID. You can check it by consulting an approved Merchant Purchase or using the endpoint to list the Merchant Cards.

Python

import starkbank
from starkbank import MerchantPurchase

merchant_purchase = MerchantPurchase(
    amount=3000,
    installment_count=3,
    card_id="6675871284854784",
    funding_type="credit",
    challenge_mode="disabled"
)      

merchant_purchase = starkbank.merchantpurchase.create(
    merchant_purchase
)

print(merchant_purchase)

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantPurchase = {
        amount: 3000,
        installmentCount: 3,
        cardId: "6675871284854784",
        fundingType: "credit",
        challengeMode: "disabled"
    };
    
    let merchantPurchaseCreated = await starkbank.merchantPurchase.create(
        merchantPurchase
    );
    
    console.log(merchantPurchaseCreated); 
})();   

PHP

use StarkBank\MerchantPurchase;

$purchase = new MerchantPurchase(
    'amount' => 3000,
    'installmentCount' => 3,
    'cardId' => "6675871284854784",
    'fundingType' => "credit"
    'challengeMode' => "disabled"
);

$merchantPurchase = MerchantPurchase::create(
    $purchase
);

print_r($merchantPurchase);      

Java

import com.starkbank.*;
import java.util.HashMap;
import java.util.Map;

Map<String, Object> merchantPurchaseData = new HashMap<>();
purchaseData.put("amount", 3000);
purchaseData.put("installmentCount", 3);
purchaseData.put("cardId", "6675871284854784");
purchaseData.put("fundingType", "credit");
purchaseData.put("challengeMode", "disabled");


MerchantPurchase merchantPurchase = MerchantPurchase.create(new MerchantPurchase(merchantPurchaseData));

System.out.println(merchantPurchase);      

Ruby

require 'starkbank'

purchase_data = {
    amount: 3000,
    installment_count: 3,
    card_id: "6675871284854784",
    funding_type: "credit",
    challenge_mode: "disabled",
}

response = StarkBank::MerchantPurchase.create(
    purchase_data
)

puts response    

Elixir

merchant_purchase = StarkBank.MerchantPurchase.create!([
    %StarkBank.MerchantPurchase{
        amount: 3000,
        installment_count: 3,
        card_id: "6675871284854784",
        funding_type: "credit",
        challenge_mode: "disabled"
    }
])    

IO.inspect(merchant_purchase)     

C#

using StarkBank;
using StarkBank.MerchantPurchase;


MerchantPurchase merchantPurchase = MerchantPurchase.Create(
    new MerchantPurchase(
        amount: 3000,
        installmentCount: 3,
        cardId: "6675871284854784",
        fundingType: "credit",
        challengeMode: "disabled"
    )
);

Console.WriteLine(merchantPurchase);      

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantPurchase "github.com/starkbank/sdk-go/starkbank/merchantpurchase"
)

func main() {
    merchantPurchase := MerchantPurchase.MerchantPurchase{
        Amount:           3000,
        InstallmentCount: 3,
        CardId:           "6675871284854784",
        FundingType:      "credit",
        ChallengeMode     "disabled",
    }

    createdPurchase, err := MerchantPurchase.Create(merchantPurchase, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(createdPurchase)
}      

Clojure

(defn create-purchase []
  (let [merchant-purchase (merchant-purchase/create {:amount 3000
                                                      :installment_count 3
                                                      :card_id "6675871284854784"
                                                      :challenge_mode "disabled"
                                                      :funding_type "credit"})]
    (println merchant-purchase)))

(create-purchase)      

Curl

curl --location --request POST '{{baseUrl}}/v2/merchant-purchase' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "amount": 3000,
    "installmentCount": 3,
    "cardId": "6675871284854784",
    "fundingType": "credit",
    "challengeMode": "disabled",
    "tags": []
}'
RESPONSE

Python

MerchantPurchase(
    amount=3000,
    billing_city=,
    billing_country_code=,
    billing_state_code=,
    billing_street_line_1=,
    billing_street_line_2=,
    billing_zip_code=,
    card_ending=0007,
    card_id=6675871284854784,
    challenge_mode=disabled,
    challenge_url=,
    created=2025-02-20 22:28:39.944785,
    currency_code=BRL,
    end_to_end_id=36814925-912d-4269-b8df-d235ad8e200a,
    fee=0,
    funding_type=credit,
    holder_email=,
    holder_name=Margaery Tyrell,
    holder_phone=,
    id=4670603130830848,
    installment_count=3,
    metadata={},
    network=mastercard,
    source=merchant-card/6295415968235520,
    status=approved,
    tags=[],
    updated=2025-02-20 22:28:41.012745
)

Javascript

MerchantPurchase {
  id: '5559970598748160',
  amount: 3000,
  installmentCount: 3,
  holderName: 'Margaery Tyrell',
  holderEmail: '',
  holderPhone: '',
  fundingType: 'credit',
  billingCountryCode: '',
  billingCity: '',
  billingStateCode: '',
  billingStreetLine1: '',
  billingStreetLine2: '',
  billingZipCode: '',
  metadata: {},
  cardEnding: '0007',
  cardId: '6675871284854784',
  challengeMode: 'disabled',
  challengeUrl: '',
  created: '2025-02-20T20:01:55.219454+00:00',
  currencyCode: 'BRL',
  endToEndId: 'f556c16b-0bc8-4361-a84e-5a5a6ca3feab',
  fee: 0,
  network: 'mastercard',
  source: 'merchant-card/6295415968235520',
  status: 'approved',
  tags: [],
  updated: '2025-02-20T20:01:56.327051+00:00'
}          

PHP

StarkBank\MerchantPurchase Object
(
    [id] => 5763106043068416
    [amount] => 3000
    [billingCity] => 
    [billingCountryCode] => 
    [billingStateCode] => 
    [billingStreetLine1] => 
    [billingStreetLine2] => 
    [billingZipCode] => 
    [cardEnding] => 9733
    [cardId] => 6675871284854784
    [challengeMode] => disabled
    [challengeUrl] => 
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:35:15.938186
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [currencyCode] => BRL
    [endToEndId] => 76c4aae3-c4b8-4cdf-b059-c10707138d5e
    [fee] => 0
    [fundingType] => credit
    [holderEmail] => 
    [holderName] => Tywin Lannister
    [holderPhone] => 
    [installmentCount] => 3
    [metadata] => Array
        (
        )
    [network] => visa
    [source] => merchant-card/6675871284854784
    [status] => approved
    [tags] => Array
        (
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:35:18.980722
            [timezone_type] => 1
            [timezone] => +00:00
        )
)      

Java

MerchantPurchase({
    "id": "5763106043068416",
    "amount": 3000,
    "billingCity": "",
    "billingCountryCode": "",
    "billingStateCode": "",
    "billingStreetLine1": "",
    "billingStreetLine2": "",
    "billingZipCode": "",
    "cardId": "6675871284854784",
    "cardEnding": "9733",
    "challengeMode": "disabled",
    "challengeUrl": "",
    "created": "2025-01-30T18:35:15.938186+00:00",
    "currencyCode": "BRL",
    "endToEndId": "76c4aae3-c4b8-4cdf-b059-c10707138d5e",
    "fee": 0,
    "fundingType": "credit",
    "holderEmail": "",
    "holderName": "Tywin Lannister",
    "holderPhone": "",
    "installmentCount": 3,
    "metadata": {},
    "network": "visa",
    "source": "merchant-card/6675871284854784",
    "status": "approved",
    "tags": [],
    "updated": "2025-01-30T18:35:18.980722+00:00"
})      

Ruby

merchantpurchase(
    id: 4854800227237888,
    amount: 3000,
    billing_city: ,
    billing_country_code: ,
    billing_state_code: ,
    billing_street_line1: ,
    billing_street_line2: ,
    billing_zip_code: ,
    card_ending: ,
    card_id: 6675871284854784,
    challenge_mode: ,
    challenge_url: ,
    created: 2025-02-20T21:55:20+00:00,
    currency_code: ,
    end_to_end_id: ,
    fee: 0,
    funding_type: ,
    holder_email: ,
    holder_name: ,
    holder_phone: ,
    installment_count: ,
    metadata: {},
    network: hipercard,
    source: merchant-card/6549906873384960,
    status: approved,
    tags: [],
    updated: 2025-02-20T21:55:22+00:00
) 

Elixir

%StarkBank.MerchantPurchase{
    id: "5763106043068416",
    amount: 3000,
    billing_city: "",
    billing_country_code: "",
    billing_state_code: "",
    billing_street_line_1: "",
    billing_street_line_2: "",
    billing_zip_code: "",
    card_id: "6675871284854784",
    card_ending: "9733",
    challenge_mode: "disabled",
    challenge_url: "",
    created: ~U[2025-01-30 18:35:15.938186Z],
    currency_code: "BRL",
    end_to_end_id: "76c4aae3-c4b8-4cdf-b059-c10707138d5e",
    fee: 0,
    funding_type: "credit",
    holder_email: "",
    holder_name: "Tywin Lannister",
    holder_phone: "",
    installment_count: 3,
    metadata: %{},
    network: "visa",
    source: "merchant-card/6675871284854784",
    status: "approved",
    tags: [],
    updated: ~U[2025-01-30 18:35:18.980722Z]
}      

C#

MerchantPurchase(
    Amount: 5000,
    FundingType: credit,
    CardId: ,
    InstallmentCount: 1,
    HolderEmail: margaery.tyrell@email.com,
    HolderPhone: 11998663456,
    BillingCountryCode: BRA,
    BillingCity: Sao Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Jardim de cima, 123,
    BillingStreetLine2: 1 andar,
    BillingZipCode: 11111-111,
    ChallengeMode: enabled,
    Metadata: {},
    CardEnding: 0007,
    ChallengeUrl: ,
    Created: 2/21/2025 3:47:24 AM,
    CurrencyCode: BRL,
    EndToEndId: dd4c0e93-0cd9-4fd4-9362-27db12e90244,
    Fee: 0,
    Network: mastercard,
    Source: merchant-session/6022753526218752,
    Status: pending,
    Tags: { yourtags },
    Updated: 2/21/2025 3:47:27 AM,
    ID: 5911980657344512
)

Go

{
    Id: "5763106043068416"
    Amount: 3000
    BillingCity: ""
    BillingCountryCode: ""
    BillingStateCode: ""
    BillingStreetLine1: ""
    BillingStreetLine2: ""
    BillingZipCode: ""
    CardEnding: "9733"
    CardId: "6675871284854784"
    ChallengeMode: "disabled"
    ChallengeUrl: ""
    Created: "2025-01-30 18:35:15.938186 +0000 +0000"
    CurrencyCode: "BRL"
    EndToEndId: "76c4aae3-c4b8-4cdf-b059-c10707138d5e"
    Fee: 0
    FundingType: "credit"
    HolderEmail: ""
    HolderName: "Tywin Lannister"
    HolderPhone: ""
    InstallmentCount: 3
    Metadata: {
        Language: ""
        ScreenHeight: 0
        ScreenWidth: 0
        TimezoneOffset: 0
        UserAgent: ""
        UserIp: ""
    },
    Network: "visa"
    Source: "merchant-card/6675871284854784"
    Status: "approved"
    Tags: []
    Updated: "2025-01-30 18:35:18.980722 +0000 +0000"
}      

Clojure

{:id "5763106043068416",
 :amount 3000,
 :billing-city "",
 :billing-country-code "",
 :billing-state-code "",
 :billing-street-line-1 "",
 :billing-street-line-2 "",
 :billing-zip-code "",
 :card-ending "9733",
 :card-id "6675871284854784",
 :challenge-mode "disabled",
 :challenge-url "",
 :created "2025-01-30T18:35:15.938186+00:00",
 :currency-code "BRL",
 :end-to-end-id "76c4aae3-c4b8-4cdf-b059-c10707138d5e",
 :fee 0,
 :funding-type "credit",
 :holder-email "",
 :holder-name "Tywin Lannister",
 :holder-phone "",
 :installment-count 3,
 :metadata {},
 :network "visa",
 :source "merchant-card/6675871284854784",
 :status "approved",
 :tags [],
 :updated "2025-01-30T18:35:18.980722+00:00"}      

Curl

{
    "message": "Merchant Purchase successfully created",
    "purchase": {
        "amount": 3000,
        "billingCity": "",
        "billingCountryCode": "",
        "billingStateCode": "",
        "billingStreetLine1": "",
        "billingStreetLine2": "",
        "billingZipCode": "",
        "cardEnding": "9733",
        "cardId": "6675871284854784",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2025-01-30T18:52:55.315590+00:00",
        "currencyCode": "BRL",
        "endToEndId": "33c022ec-2c54-46e5-b20b-eb10edfaf021",
        "fee": 0,
        "fundingType": "credit",
        "holderEmail": "",
        "holderName": "Tywin Lannister",
        "holderPhone": "",
        "id": "5752391039188992",
        "installmentCount": 3,
        "metadata": {},
        "network": "visa",
        "source": "merchant-card/6675871284854784",
        "status": "approved",
        "tags": [
        ],
        "updated": "2025-01-30T18:52:57.518852+00:00"
    }
}

Querying Merchant Purchases

You can retrieve a Merchant Purchase by its ID or list them using parameters such as limit, after, before to filter the results, as shown in the example below:

You can also query Merchant Purchases using tags to find purchases associated with a specific order. When creating a Merchant Purchase, assign a tag with the order ID. Later, use the tags parameter to retrieve all purchases linked to that order.

Python

import starkbank

merchantpurchases = starkbank.merchantpurchase.query(limit=1, tags=["order/123"], status="approved")

for merchantpurchase in merchantpurchases:
    print(merchantpurchase)
        

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantPurchases = await starkbank.merchantPurchase.query({limit: 3, tags: ["order/123"], status: "approved"});

    for await (let merchantPurchase of merchantPurchases){
        console.log(merchantPurchase);
    }
})();
    

PHP

use StarkBank\MerchantPurchase;

$merchantPurchases = MerchantPurchase::query(["limit" => 1, "tags" => ["order/123"], "status" => "approved"]);

foreach($merchantPurchases as $merchantPurchase){
    print_r($merchantPurchase);
}           
        

Java

import com.starkbank.*;
import com.starkbank.utils.Generator;
import java.util.HashMap;


HashMap<String, Object> params = new HashMap<>();
params.put("limit", 1);
params.put("tags", new String[]{"order/123"});
params.put("status", "approved");
Generator<MerchantPurchase> merchantPurchases = MerchantPurchase.query(params);

for (MerchantPurchase merchantPurchase : merchantPurchases) {
    System.out.println(merchantPurchase);
}        
        

Ruby

require 'starkbank'

merchantPurchases = StarkBank::MerchantPurchase.query(limit: 1, tags: ["order/123"], status: "approved")

merchantPurchases.each do |merchantPurchase|
    puts merchantPurchase
end           
        

Elixir

merchantPurchases = StarkBank.MerchantPurchase.query!(limit: 1, tags: ["order/123"], status: "approved")

for merchantPurchase <- merchantPurchases do
    merchantPurchase |> IO.inspect
end         
        

C#

using System;
using StarkBank;

List<MerchantPurchase> merchantPurchases = MerchantPurchase.Query(limit: 1, tags: new List<string> {"order/123"}, status: "approved").ToList();

foreach (MerchantPurchase merchantPurchase in merchantPurchases)
{
    Console.WriteLine(merchantPurchase);
}        
        

Go

package main

import (
    "fmt"
    MerchantPurchase "github.com/starkbank/sdk-go/starkbank/merchantpurchase"
)

func main() {

    var params = map[string]interface{}{}
    params["limit"] = 1
    params["tags"] = []string{"order/123"}
    params["status"] = "approved"

    merchantpurchases, errorChannel := MerchantPurchase.Query(params, nil)

    loop:
    for {
        select {
        case err := <-errorChannel:
            if err.Errors != nil {
                for _, e := range err.Errors {
                    fmt.Printf("code: %s, message: %s", e.Code, e.Message)
                }
            }
        case merchantpurchase, ok := <-merchantpurchases:
            if !ok {
                break loop
            }
            fmt.Printf("%+v", merchantpurchase)
        }
    }
}            
        

Clojure

(def merchant-purchases
  (starkbank.merchant-purchase/query
    {
      :limit 1
      :tags ["order/123"]
      :status "approved"
    }))
(dorun (map println merchant-purchases))         
        

Curl

curl --location --request GET '{{baseUrl}}/v2/merchant-purchase?limit=1&tags=order%2F123&status=approved' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
    
RESPONSE

Python

MerchantPurchase(
    amount=10000,
    billing_city=Sao Paulo,
    billing_country_code=BRA,
    billing_state_code=SP,
    billing_street_line_1=Rua Casterly Rock, 2000,
    billing_street_line_2=1 andar,
    billing_zip_code=01450-000,
    card_ending=0007,
    id=6295415968235520,
    challenge_mode=enabled,
    challenge_url=,
    created=2025-02-20 20:47:43.237974,
    currency_code=BRL,
    end_to_end_id=1087c2ba-6a07-4108-82f7-14156032af48,
    fee=0,
    funding_type=credit,
    holder_email=tywin.lannister@gmail.com,
    holder_name=Margaery Tyrell,
    holder_phone=11985923451,
    id=5136275203948544,
    installment_count=5,
    metadata={
        'extraData': 'extraData',
        'language': 'pt-BR',
        'screenHeight': 500,
        'screenWidth': 500,
        'timezoneOffset': 3,
        'userAgent': 'userAgent',
        'userIp': '184.82.170.183'
    },
    network=mastercard,
    source=merchant-card/6295415968235520,
    status=pending,
    tags=[],
    updated=2025-02-20 20:47:46.491252
)
    

Javascript

MerchantPurchase {
    id: '5476090868924416',
    amount: 180,
    installmentCount: 12,
    holderName: 'Holder Name',
    holderEmail: 'holdeName@email.com',
    holderPhone: '11111111111',
    fundingType: 'credit',
    billingCountryCode: 'BRA',
    billingCity: 'São Paulo',
    billingStateCode: 'SP',
    billingStreetLine1: 'Rua do Holder Name, 123',
    billingStreetLine2: '',
    billingZipCode: '01450-000',
    cardEnding: '9733',
    cardId: '',
    challengeMode: 'disabled',
    challengeUrl: '',
    created: '2024-07-15T23:10:03.306115+00:00',
    currencyCode: 'BRL',
    endToEndId: '1af93a6e-3376-4555-a5b4-b3b81fb42474',
    fee: 0,
    network: 'mastercard',
    source: 'merchant-session/6238344014987264',
    status: 'denied',
    tags: ['yourtags'],
    updated: '2024-07-15T23:10:05.635255+00:00'
}
    

PHP

StarkBank\MerchantPurchase Object
(
    [id] => 5693253768708096
    [amount] => 5000
    [billingCity] => Sao Paulo
    [billingCountryCode] => BRA
    [billingStateCode] => SP
    [billingStreetLine1] => Rua Casterly Rock, 2000
    [billingStreetLine2] => 
    [billingZipCode] => 01450-000
    [cardEnding] => 9733
    [cardId] => 5920400605184000
    [challengeMode] => enabled
    [challengeUrl] => https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:39:52.136626
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [currencyCode] => BRL
    [endToEndId] => 00372f52-52c8-4907-b03b-3946cacae4e3
    [fee] => 0
    [fundingType] => debit
    [holderEmail] => tywin.lannister@gmail.com
    [holderName] => Tywin Lannister
    [holderPhone] => 11999999999
    [installmentCount] => 1
    [metadata] => Array
        (
            [language] => pt-BR
            [screenHeight] => 500
            [screenWidth] => 500
            [timezoneOffset] => 3
            [userAgent] => Mozilla
            [userIp] => 111.111.111.111
        )
    [network] => mastercard
    [source] => merchant-session/5674419263373312
    [status] => pending
    [tags] => Array
        (
            [0] => purchase_1234
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 18:39:54.029416
            [timezone_type] => 1
            [timezone] => +00:00
        )
)      
        

Java

MerchantPurchase({
    "amount": 5000,
    "billingCity": "Sao Paulo",
    "billingCountryCode": "BRA",
    "billingStateCode": "SP",
    "billingStreetLine1": "Rua Casterly Rock, 2000",
    "billingStreetLine2": "",
    "billingZipCode": "01450-000",
    "cardEnding": "9733",
    "cardId": "5920400605184000",
    "challengeMode": "enabled",
    "challengeUrl": "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    "created": "2025-01-30T18:39:52.136626+00:00",
    "currencyCode": "BRL",
    "endToEndId": "00372f52-52c8-4907-b03b-3946cacae4e3",
    "fee": 0,
    "fundingType": "debit",
    "holderEmail": "tywin.lannister@gmail.com",
    "holderName": "Tywin Lannister",
    "holderPhone": "11999999999",
    "id": "5693253768708096",
    "installmentCount": 1,
    "metadata": {
        "language": "pt-BR",
        "screenHeight": 500,
        "screenWidth": 500,
        "timezoneOffset": 3,
        "userAgent": "Mozilla",
        "userIp": "111.111.111.111"
    },
    "network": "mastercard",
    "source": "merchant-session/5674419263373312",
    "status": "pending",
    "tags": [
        "purchase_1234"
    ],
    "updated": "2025-01-30T18:39:54.029416+00:00"
})      
  

Ruby

merchantpurchase(
    id: 5099195274887168,
    amount: 5000,
    holder_name: Rhaenyra Targaryen,
    funding_type: credit,
    holder_email: rhaenyra.targaryen@gmail.com,
    holder_phone: 11985923451,
    installment_count: 1,
    billing_country_code: BRA,
    billing_city: Sao Paulo,
    billing_state_code: SP,
    billing_street_line_1: Rua Casterly Rock, 2000,
    billing_street_line_2: 1 andar,
    billing_zip_code: 01450-000,
    metadata: {
        "extradata"=>"extraData",
        "language"=>"pt-BR",
        "timezoneoffset"=>3,
        "useragent"=>"Mozilla",
        "userip"=>"255.255.255.255"
    },
    card_ending: 9733,
    card_id: ,
    challenge_mode: disabled,
    challenge_url: ,
    created: 2025-02-20T22:31:13+00:00,
    currency_code: BRL,
    end_to_end_id: 6ba82bc4-8ca3-4613-a38e-575a25984e26,
    fee: 0,
    network: mastercard,
    source: merchant-session/4992147199623168,
    status: denied,
    tags: ["session_123"],
    updated: 2025-02-20T22:31:14+00:00
)
        

Elixir

%StarkBank.MerchantPurchase{
    amount: 5000,
    billing_city: "Sao Paulo",
    billing_country_code: "BRA",
    billing_state_code: "SP",
    billing_street_line_1: "Rua Casterly Rock, 2000",
    billing_street_line_2: "",
    billing_zip_code: "01450-000",
    card_ending: "9733",
    card_id: "5920400605184000",
    challenge_mode: "enabled",
    challenge_url: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    created: ~U[2025-01-30 18:39:52.136626Z],
    currency_code: "BRL",
    end_to_end_id: "00372f52-52c8-4907-b03b-3946cacae4e3",
    fee: 0,
    funding_type: "debit",
    holder_email: "tywin.lannister@gmail.com",
    holder_name: "Tywin Lannister",
    holder_phone: "11999999999",
    id: "5693253768708096",
    installment_count: 1,
    metadata: %{
        language: "pt-BR",
        screenHeight: 500,
        screenWidth: 500,
        timezoneOffset: 3,
        userAgent: "Mozilla",
        userIp: "111.111.111.111"
    },
    network: "mastercard",
    source: "merchant-session/5674419263373312",
    status: "pending",
    tags: ["purchase_1234"],
    updated: ~U[2025-01-30 18:39:54.029416Z]
}
        

C#

MerchantPurchase(
    Amount: 180,
    FundingType: credit,
    CardId: ,
    InstallmentCount: 12,
    HolderEmail: holdeName@email.com,
    HolderPhone: 11111111111,
    BillingCountryCode: BRA,
    BillingCity: São Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Holder Name, 123,
    BillingStreetLine2: casa,
    BillingZipCode: 11111-111,
    ChallengeMode: enabled,
    Metadata: {},
    ID: "6351618970746880",
    BillingStreetLine2: "",
    ChallengeUrl: "",
    Created: "2025-02-21T02:54:37.177501+00:00",
    CurrencyCode: "BRL",
    EndToEndId: "e35d6174-af66-47fa-9606-44977065e4e7",
    Fee: 0,
    HolderName: "Marasi Colms",
    Network: "hipercard",
    Source: "merchant-card/6549906873384960",
    Status: "paid",
    Tags: [],
    Updated: "01/30/2025 18:39:54",
)
        

Go

{
    Id: "5693253768708096",
    Amount: 5000,
    BillingCity: "Sao Paulo",
    BillingCountryCode: "BRA",
    BillingStateCode: "SP",
    BillingStreetLine1: "Rua Casterly Rock, 2000",
    BillingStreetLine2: "",
    BillingZipCode: "01450-000",
    CardEnding: "9733",
    CardId: "5920400605184000",
    ChallengeMode: "enabled",
    ChallengeUrl: "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
    Created: "2025-01-30 18:39:52.136626 +0000 +0000",
    CurrencyCode: "BRL",
    EndToEndId: "00372f52-52c8-4907-b03b-3946cacae4e3",
    Fee: 0,
    FundingType: "debit",
    HolderEmail: "tywin.lannister@gmail.com",
    HolderName: "Tywin Lannister",
    HolderPhone: "11999999999",
    InstallmentCount: 1,
    Metadata: {
        Language: "pt-BR",
        ScreenHeight: 500,
        ScreenWidth: 500,
        TimezoneOffset: 3,
        UserAgent: "Mozilla",
        UserIp: "111.111.111.111"
    },
    Network: "mastercard",
    Source: "merchant-session/5674419263373312",
    Status: "pending",
    Tags: ["purchase_1234"],
    Updated: "2025-01-30 18:39:54.029416 +0000 +0000",
    Uuid: "63caf64913d14465b1ebe2ec09a8b1cd"
}      
        

Clojure

{:id "5693253768708096",
:amount 5000,
:billing-city "Sao Paulo",
:billing-country-code "BRA",
:billing-state-code "SP",
:billing-street-line-1 "Rua Casterly Rock, 2000",
:billing-street-line-2 "",
:billing-zip-code "01450-000",
:card-ending "9733",
:card-id "5920400605184000",
:challenge-mode "enabled",
:challenge-url "https://development.api.starkinfra.com/v2/acquiring-purchase/5752622027898880/challenge",
:created "2025-01-30T18:39:52.136626+00:00",
:currency-code "BRL",
:end-to-end-id "00372f52-52c8-4907-b03b-3946cacae4e3",
:fee 0,
:funding-type "debit",
:holder-email "tywin.lannister@gmail.com",
:holder-name "Tywin Lannister",
:holder-phone "11999999999",
:installment-count 1,
:metadata {:language "pt-BR",
            :screen-height 500,
            :screen-width 500,
            :timezone-offset 3,
            :user-agent "Mozilla",
            :user-ip "111.111.111.111"},
:network "mastercard",
:source "merchant-session/5674419263373312",
:status "pending",
:tags ["purchase_1234"],
:updated "2025-01-30T18:39:54.029416+00:00"}      
        

Curl

{
    "cursor": "ClcKFAoHY3JlYXRlZBIJCKDD2tebqYcDEjtqGml-YXBpLW1zLWNhcmQtbWVyY2hhbnQtc2J4ch0LEhBNZXJjaGFudFB1cmNoYXNlGICAgNil4boIDBgAIAE=",
    "purchases": [
        {
            "amount": 180,
            "billingCity": "São Paulo",
            "billingCountryCode": "BRA",
            "billingStateCode": "SP",
            "billingStreetLine1": "Rua do Holder Name, 123",
            "billingStreetLine2": "",
            "billingZipCode": "01450-000",
            "cardEnding": "9733",
            "cardId": "",
            "challengeMode": "disabled",
            "challengeUrl": "",
            "created": "2024-07-16T15:26:41.391876+00:00",
            "currencyCode": "BRL",
            "endToEndId": "53e0246b-be7a-4de3-9e99-793f80b8cb89",
            "fee": 0,
            "fundingType": "credit",
            "holderEmail": "holdeName@email.com",
            "holderName": "Holder Name",
            "holderPhone": "11111111111",
            "id": "6066273465139200",
            "installmentCount": 12,
            "metadata": {},
            "network": "mastercard",
            "source": "merchant-session/6097606526631936",
            "status": "denied",
            "tags": [
                "yourtags"
            ],
            "updated": "2024-07-16T15:26:44.679776+00:00"
        }
    ]
}
    

Canceling a Merchant Purchase

To cancel a Merchant Purchase, its status must be approved. The amount is set to 0, which cancels the authorization.

While the cancellation is being processed, the purchase status remains approved.

Python

import starkbank

merchant_purchase = starkbank.merchantpurchase.update(id="4614918116474880", status="canceled", amount=0)

print(merchant_purchase)

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantPurchase = await starkbank.merchantPurchase.update('5910732566691840', {status: 'canceled', amount: 0});
    console.log(merchantPurchase);
})();      

PHP

use StarkBank\MerchantPurchase;

$merchantPurchase = MerchantPurchase::update("4600131349381120", "canceled", 0);

print_r($merchantPurchase);

Java

HashMap<String, Object> patchData = new HashMap<>();
patchData.put("amount", 0);
patchData.put("status", "canceled");

MerchantPurchase merchantPurchase = MerchantPurchase.update("4600131349381120", patchData);

System.out.println(merchantPurchase);

Ruby

require('starkbank')

merchant_purchase = StarkBank::MerchantPurchase.update(
    '5716561121771520',
    {
        "status": 'canceled',
        "amount": 0
    }
)

puts merchant_purchase      

Elixir

merchant_purchase = StarkBank.MerchantPurchase.update!(
    id: "4600131349381120",
    status: "canceled",
    amount: 0
)

merchant_purchase |> IO.inspect   

C#

using StarkBank;
using StarkBank.MerchantPurchase;
using System;

MerchantPurchase merchantPurchase = MerchantPurchase.Update(
    id: "4600131349381120",
    status: "canceled",
    amount: 0
);

Console.WriteLine(merchantPurchase);    

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantPurchase "github.com/starkbank/sdk-go/starkbank/merchantpurchase"
)

func main() {
    var patchData = map[string]interface{}{}
    patchData["amount"] = 0    
    patchData["status"] = "canceled"

    merchantPurchase, err := MerchantPurchase.Update("4600131349381120", patchData, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }
        
    fmt.Println(merchantPurchase)
}      

Clojure

(defn update-merchant-purchase []
  (let [merchant-purchase (merchant-purchase/update {:id "4600131349381120"
                                                     :status "canceled"
                                                     :amount 0})]
    (println merchant-purchase)))      

Curl

curl --location --request PATCH '{{baseUrl}}/v2/merchant-purchase/"4600131349381120"' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
  "status": "canceled",
  "amount": 0
}'
RESPONSE

Python

MerchantPurchase(
    amount=0,
    billing_city=Sao Paulo,
    billing_country_code=BRA,
    billing_state_code=SP,
    billing_street_line_1=Rua Pamplona,
    billing_street_line_2=,
    billing_zip_code=11111-111,
    card_ending=5682,
    card_id=6610501521899520,
    challenge_mode=disabled,
    challenge_url=,
    created=2024-07-15 15:05:14.333648,
    currency_code=BRL,
    end_to_end_id=7af76e0a-efef-44d5-9962-ce8c59b5c830,
    fee=0,
    funding_type=credit,
    holder_email=holderemail@gmail.com,
    holder_name=Holder Name,
    holder_phone=1111111111,
    id=4614918116474880,
    installment_count=1,
    metadata={
        'extraData': 'extraData',
        'language': 'pt-BR',
        'timezoneOffset': 3,
        'userAgent': 'MS-QA',
        'userIp': '255.255.255.255'
    },
    network=visa,
    source=merchant-session/5212877086523392,
    status=approved,
    tags=[],
    updated=2025-02-20 22:46:27.926729
)

Javascript

MerchantPurchase {
  id: '5910732566691840',
  amount: 0,
  installmentCount: 1,
  holderName: 'Holder Name',
  holderEmail: 'holderemail@gmail.com',
  holderPhone: '1111111111',
  fundingType: 'credit',
  billingCountryCode: 'BRA',
  billingCity: 'Sao Paulo',
  billingStateCode: 'SP',
  billingStreetLine1: 'Rua Pamplona',
  billingStreetLine2: '',
  billingZipCode: '11111-111',
  metadata: {
    extraData: 'extraData',
    language: 'pt-BR',
    timezoneOffset: 3,
    userAgent: 'MS-QA',
    userIp: '255.255.255.255'
  },
  cardEnding: '5682',
  cardId: '6610501521899520',
  challengeMode: 'disabled',
  challengeUrl: '',
  created: '2024-07-15T14:37:52.888031+00:00',
  currencyCode: 'BRL',
  endToEndId: '83d4291f-c4c5-4ab6-8f4b-4ccdea3fd208',
  fee: 0,
  network: 'visa',
  source: 'merchant-session/6443473934745600',
  status: 'approved',
  tags: [],
  updated: '2025-02-20T20:15:12.268758+00:00'
}      

PHP

StarkBank\MerchantPurchase Object
(
    [id] => 5752391039188992
    [amount] => 0
    [billingCity] => 
    [billingCountryCode] => 
    [billingStateCode] => 
    [billingStreetLine1] => 
    [billingStreetLine2] => 
    [billingZipCode] => 
    [cardEnding] => 0005
    [cardId] => 6675871284854784
    [challengeMode] => disabled
    [challengeUrl] => 
    [created] => DateTime Object
        (
            [date] => 2025-01-30 18:52:55.315590
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [currencyCode] => BRL
    [endToEndId] => 33c022ec-2c54-46e5-b20b-eb10edfaf021
    [fee] => 160
    [fundingType] => credit
    [holderEmail] => 
    [holderName] => Rlain Listener
    [holderPhone] => 
    [installmentCount] => 3
    [metadata] => Array
        (
        )
    [network] => visa
    [source] => merchant-card/6675871284854784
    [status] => confirmed
    [tags] => Array
        (
            [0] => purchase_1234
        )
    [updated] => DateTime Object
        (
            [date] => 2025-01-30 20:44:06.470183
            [timezone_type] => 1
            [timezone] => +00:00
        )
)      

Java

MerchantPurchase({
    "id": "5752391039188992",
    "amount": 0,
    "billingCity": "",
    "billingCountryCode": "",
    "billingStateCode": "",
    "billingStreetLine1": "",
    "billingStreetLine2": "",
    "billingZipCode": "",
    "cardId": "6675871284854784",
    "cardEnding": "0005",
    "challengeMode": "disabled",
    "challengeUrl": "",
    "created": "2025-01-30T18:52:55.315590+00:00",
    "currencyCode": "BRL",
    "endToEndId": "33c022ec-2c54-46e5-b20b-eb10edfaf021",
    "fee": 160,
    "fundingType": "credit",
    "holderEmail": "",
    "holderName": "Rlain Listener",
    "holderPhone": "",
    "installmentCount": 3,
    "metadata": {},
    "network": "visa",
    "source": "merchant-card/6675871284854784",
    "status": "confirmed",
    "tags": ["purchase_1234"],
    "updated": "2025-01-30T20:44:06.470183+00:00"
})      

Ruby

merchantpurchase(
    id: 5716561121771520,
    amount: 0,
    billing_city: ,
    billing_country_code: ,
    billing_state_code: ,
    billing_street_line1: ,
    billing_street_line2: ,
    billing_zip_code: ,
    card_ending: ,
    card_id: ,
    challenge_mode: ,
    challenge_url: ,
    created: 2024-04-04T21:32:10+00:00,
    currency_code: ,
    end_to_end_id: ,
    fee: 0,
    funding_type: ,
    holder_email: ,
    holder_name: ,
    holder_phone: ,
    installment_count: ,
    metadata: {},
    network: mastercard,
    source: merchant-session/4792220137816064,
    status: approved,
    tags: ["pedaco-de-pao"],
    updated: 2025-02-20T22:15:01+00:00
)

Elixir

%StarkBank.MerchantPurchase{
    id: "5752391039188992",
    amount: 0,
    billing_city: "",
    billing_country_code: "",
    billing_state_code: "",
    billing_street_line_1: "",
    billing_street_line_2: "",
    billing_zip_code: "",
    card_id: "6675871284854784",
    card_ending: "0005",
    challenge_mode: "disabled",
    challenge_url: "",
    created: ~U[2025-01-30 18:52:55.315590Z],
    currency_code: "BRL",
    end_to_end_id: "33c022ec-2c54-46e5-b20b-eb10edfaf021",
    fee: 160,
    funding_type: "credit",
    holder_email: "",
    holder_name: "Rlain Listener",
    holder_phone: "",
    installment_count: 3,
    metadata: %{},
    network: "visa",
    source: "merchant-card/6675871284854784",
    status: "confirmed",
    tags: ["purchase_1234"],
    updated: ~U[2025-01-30 20:44:06.470183Z]
}      

C#

MerchantPurchase(
    Amount: 5000,
    FundingType: credit,
    CardId: ,
    InstallmentCount: 1,
    HolderEmail: margaery.tyrell@email.com,
    HolderPhone: 11998663456,
    BillingCountryCode: BRA,
    BillingCity: Sao Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Jardim de cima, 123,
    BillingStreetLine2: 1 andar,
    BillingZipCode: 11111-111,
    ChallengeMode: enabled,
    Metadata: {},
    CardEnding: 0007,
    ChallengeUrl: ,
    Created: 2/21/2025 3:47:24 AM,
    CurrencyCode: BRL,
    EndToEndId: dd4c0e93-0cd9-4fd4-9362-27db12e90244,
    Fee: 0,
    Network: mastercard,
    Source: merchant-session/6022753526218752,
    Status: approved,
    Tags: { yourtags },
    Updated: 2/21/2025 3:47:27 AM,
    ID: 4600131349381120
)    

Go

{
    Id: "5752391039188992"
    Amount: 0
    BillingCity: ""
    BillingCountryCode: ""
    BillingStateCode: ""
    BillingStreetLine1: ""
    BillingStreetLine2: ""
    BillingZipCode: ""
    CardEnding: "0005"
    CardId: "6675871284854784"
    ChallengeMode: "disabled"
    ChallengeUrl: ""
    Created: "2025-01-30 18:52:55.315590 +0000 +0000"
    CurrencyCode: "BRL"
    EndToEndId: "33c022ec-2c54-46e5-b20b-eb10edfaf021"
    Fee: 160
    FundingType: "credit"
    HolderEmail: ""
    HolderName: "Rlain Listener"
    HolderPhone: ""
    InstallmentCount: 3
    Metadata: {}
    Network: "visa"
    Source: "merchant-card/6675871284854784"
    Status: "confirmed"
    Tags: ["purchase_1234"]
    Updated: "2025-01-30 20:44:06.470183 +0000 +0000"
}      

Clojure

{:id "5752391039188992",
 :amount 0,
 :billing-city "",
 :billing-country-code "",
 :billing-state-code "",
 :billing-street-line-1 "",
 :billing-street-line-2 "",
 :billing-zip-code "",
 :card-ending "0005",
 :card-id "6675871284854784",
 :challenge-mode "disabled",
 :challenge-url "",
 :created "2025-01-30T18:52:55.315590+00:00",
 :currency-code "BRL",
 :end-to-end-id "33c022ec-2c54-46e5-b20b-eb10edfaf021",
 :fee 160,
 :funding-type "credit",
 :holder-email "",
 :holder-name "Rlain Listener",
 :holder-phone "",
 :installment-count 3,
 :metadata {},
 :network "visa",
 :source "merchant-card/6675871284854784",
 :status "confirmed",
 :tags ["purchase_1234"],
 :updated "2025-01-30T20:44:06.470183+00:00"}      

Curl

{
    "message": "Merchant Purchase successfully patched",
    "purchase": {
        "amount": 0,
        "billingCity": "",
        "billingCountryCode": "",
        "billingStateCode": "",
        "billingStreetLine1": "",
        "billingStreetLine2": "",
        "billingZipCode": "",
        "cardEnding": "0005",
        "cardId": "6675871284854784",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2025-01-30T18:52:55.315590+00:00",
        "currencyCode": "BRL",
        "endToEndId": "33c022ec-2c54-46e5-b20b-eb10edfaf021",
        "fee": 160,
        "fundingType": "credit",
        "holderEmail": "",
        "holderName": "Rlain Listener",
        "holderPhone": "",
        "id": "5752391039188992",
        "installmentCount": 3,
        "metadata": {},
        "network": "visa",
        "source": "merchant-card/6675871284854784",
        "status": "confirmed",
        "tags": [
            "purchase_1234"
        ],
        "updated": "2025-01-30T20:44:06.470183+00:00"
    }
}

Partially Reversing a Merchant Purchase

Partial reversals are only allowed one day after the purchase confirmation.

To partially reverse a Merchant Purchase, its status must be confirmed. This action debits the difference and reverses part of the purchase.

While the reversal is being processed, the purchase status remains confirmed. After the partial reversal is completed, the status also remains confirmed.

Python

import starkbank

merchant_purchase = starkbank.merchantpurchase.update(id="5449037499072512", status="reversed", amount=500)

print(merchant_purchase)

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantPurchase = await starkbank.merchantPurchase.update("6494532237524992", {status: 'reversed', amount: 500});
    console.log(merchantPurchase);
})();      

PHP

use StarkBank\MerchantPurchase;
        
$merchantPurchase = MerchantPurchase::update("4600131349381120", "reversed", 500);

print_r($merchantPurchase);  

Java

HashMap<String, Object> patchData = new HashMap<>();
patchData.put("amount", 500);
patchData.put("status", "reversed");

MerchantPurchase merchantPurchase = MerchantPurchase.update("4600131349381120", patchData);

System.out.println(merchantPurchase);

Ruby

require('starkbank')

merchant_purchase = StarkBank::MerchantPurchase.update(
    "5710961784651776",
    {
        "status": 'reversed',
        "amount": 500
    }
)

puts merchant_purchase     

Elixir

merchant_purchase = StarkBank.MerchantPurchase.update!(
    id: "4600131349381120",
    status: "reversed",
    amount: 500
)

merchant_purchase |> IO.inspect   

C#

using StarkBank;
using StarkBank.MerchantPurchase;
using System;

MerchantPurchase merchantPurchase = MerchantPurchase.Update(
    id: "4600131349381120",
    status: "reversed",
    amount: 500
);

Console.WriteLine(merchantPurchase);    

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantPurchase "github.com/starkbank/sdk-go/starkbank/merchantpurchase"
)

func main() {

    var patchData = map[string]interface{}{}
    patchData["amount"] = 500    
    patchData["status"] = "reversed"

    merchantPurchase, err := MerchantPurchase.Update("4600131349381120", patchData, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(merchantPurchase)
}       

Clojure

(defn update-merchant-purchase []
  (let [merchant-purchase (merchant-purchase/update {:id "4600131349381120"
                                                      :status "reversed"
                                                      :amount 500})]
    (println merchant-purchase)))      

Curl

curl --location --request PATCH '{{baseUrl}}/v2/merchant-purchase/4600131349381120' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "status": "reversed",
    "amount": 500
}'
RESPONSE

Python

MerchantPurchase(
    amount=500,
    billing_city=Sao Paulo,
    billing_country_code=BRA,
    billing_state_code=SP,
    billing_street_line_1=Rua do Holder Name, 123,
    billing_street_line_2=1 andar,
    billing_zip_code=11111-111,
    card_ending=1625,
    card_id=5113758527520768,
    challenge_mode=disabled,
    challenge_url=,
    created=2025-02-12 18:05:52.410877,
    currency_code=BRL,
    end_to_end_id=0caccf92-cb1a-4c22-a68b-bdd8a907676a,
    fee=265,
    funding_type=credit,
    holder_email=holdeName@email.com,
    holder_name=Marasi Colms,
    holder_phone=11111111111,
    id=5449037499072512,
    installment_count=5,
    metadata={
        'extraData': 'extraData',
        'language': 'pt-BR',
        'timezoneOffset': 3,
        'userAgent': 'userAgent',
        'userIp': '255.255.255.255'
    },
    network=diners,
    source=merchant-card/5113758527520768,
    status=confirmed,
    tags=['teste'],
    updated=2025-02-20 22:53:19.315768
)            

Javascript

MerchantPurchase {
  id: '6494532237524992',
  amount: 500,
  installmentCount: 1,
  holderName: 'Margaery Tyrell',
  holderEmail: '',
  holderPhone: '',
  fundingType: 'credit',
  billingCountryCode: '',
  billingCity: '',
  billingStateCode: '',
  billingStreetLine1: '',
  billingStreetLine2: '',
  billingZipCode: '',
  metadata: {},
  cardEnding: '1625',
  cardId: '5113758527520768',
  challengeMode: 'disabled',
  challengeUrl: '',
  created: '2025-02-13T20:02:26.058501+00:00',
  currencyCode: 'BRL',
  endToEndId: 'bd5e0c93-b202-4b95-b796-8173cf287ed8',
  fee: 24,
  network: 'diners',
  source: 'merchant-session/5770820206985216',
  status: 'paid',
  tags: [ 'yourtags' ],
  updated: '2025-02-20T20:17:13.151842+00:00'
}      

PHP

StarkBank\MerchantPurchase Object
(
  [id] => 4600131349381120
  [amount] => 500
  [billingCity] => 
  [billingCountryCode] => 
  [billingStateCode] => 
  [billingStreetLine1] => 
  [billingStreetLine2] => 
  [billingZipCode] => 
  [cardEnding] => 0005
  [cardId] => 6675871284854784
  [challengeMode] => disabled
  [challengeUrl] => 
  [created] => DateTime Object
    (
      [date] => 2025-01-30 18:52:55.315590
      [timezone_type] => 1
      [timezone] => +00:00
    )
  [currencyCode] => BRL
  [endToEndId] => 33c022ec-2c54-46e5-b20b-eb10edfaf021
  [fee] => 160
  [fundingType] => credit
  [holderEmail] => 
  [holderName] => Rlain Listener
  [holderPhone] => 
  [installmentCount] => 3
  [metadata] => Array
    (
    )
  [network] => visa
  [source] => merchant-card/6675871284854784
  [status] => confirmed
  [tags] => Array
    (
      [0] => purchase_1234
    )
  [updated] => DateTime Object
    (
      [date] => 2025-01-30 20:44:06.470183
      [timezone_type] => 1
      [timezone] => +00:00
    )
)      

Java

MerchantPurchase({
"id": "4600131349381120",
"amount": 500,
"billingCity": "",
"billingCountryCode": "",
"billingStateCode": "",
"billingStreetLine1": "",
"billingStreetLine2": "",
"billingZipCode": "",
"cardId": "6675871284854784",
"cardEnding": "0005",
"challengeMode": "disabled",
"challengeUrl": "",
"created": "2025-01-30T18:52:55.315590+00:00",
"currencyCode": "BRL",
"endToEndId": "33c022ec-2c54-46e5-b20b-eb10edfaf021",
"fee": 160,
"fundingType": "credit",
"holderEmail": "",
"holderName": "Rlain Listener",
"holderPhone": "",
"installmentCount": 3,
"metadata": {},
"network": "visa",
"source": "merchant-card/6675871284854784",
"status": "confirmed",
"tags": ["purchase_1234"],
"updated": "2025-01-30T20:44:06.470183+00:00"
})      

Ruby

merchantpurchase(
  id: 5710961784651776,
  amount: 500,
  billing_city: ,
  billing_country_code: ,
  billing_state_code: ,
  billing_street_line1: ,
  billing_street_line2: ,
  billing_zip_code: ,
  card_ending: ,
  card_id: ,
  challenge_mode: ,
  challenge_url: ,
  created: 2025-02-10T14:35:03+00:00,
  currency_code: ,
  end_to_end_id: ,
  fee: 24,
  funding_type: ,
  holder_email: ,
  holder_name: ,
  holder_phone: ,
  installment_count: ,
  metadata: {},
  network: diners,
  source: merchant-session/5370196504084480,
  status: paid,
  tags: ["stark", "suit"],
  updated: 2025-02-20T22:17:42+00:00
)

Elixir

%StarkBank.MerchantPurchase{
id: "4600131349381120",
amount: 500,
billing_city: "",
billing_country_code: "",
billing_state_code: "",
billing_street_line_1: "",
billing_street_line_2: "",
billing_zip_code: "",
card_id: "6675871284854784",
card_ending: "0005",
challenge_mode: "disabled",
challenge_url: "",
created: ~U[2025-01-30 18:52:55.315590Z],
currency_code: "BRL",
end_to_end_id: "33c022ec-2c54-46e5-b20b-eb10edfaf021",
fee: 160,
funding_type: "credit",
holder_email: "",
holder_name: "Rlain Listener",
holder_phone: "",
installment_count: 3,
metadata: %{},
network: "visa",
source: "merchant-card/6675871284854784",
status: "confirmed",
tags: ["purchase_1234"],
updated: ~U[2025-01-30 20:44:06.470183Z]
}      

C#

MerchantPurchase(
    Amount: 5000,
    FundingType: credit,
    CardId: ,
    InstallmentCount: 1,
    HolderEmail: margaery.tyrell@email.com,
    HolderPhone: 11998663456,
    BillingCountryCode: BRA,
    BillingCity: Sao Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Jardim de cima, 123,
    BillingStreetLine2: 1 andar,
    BillingZipCode: 11111-111,
    ChallengeMode: enabled,
    Metadata: {},
    CardEnding: 0007,
    ChallengeUrl: ,
    Created: 2/21/2025 3:47:24 AM,
    CurrencyCode: BRL,
    EndToEndId: dd4c0e93-0cd9-4fd4-9362-27db12e90244,
    Fee: 0,
    Network: mastercard,
    Source: merchant-session/6022753526218752,
    Status: paid,
    Tags: { yourtags },
    Updated: 2/21/2025 3:47:27 AM,
    ID: 4600131349381120
)

Go

{
Id: "4600131349381120"
Amount: 500
BillingCity: ""
BillingCountryCode: ""
BillingStateCode: ""
BillingStreetLine1: ""
BillingStreetLine2: ""
BillingZipCode: ""
CardEnding: "0005"
CardId: "6675871284854784"
ChallengeMode: "disabled"
ChallengeUrl: ""
Created: "2025-01-30 18:52:55.315590 +0000 +0000"
CurrencyCode: "BRL"
EndToEndId: "33c022ec-2c54-46e5-b20b-eb10edfaf021"
Fee: 160
FundingType: "credit"
HolderEmail: ""
HolderName: "Rlain Listener"
HolderPhone: ""
InstallmentCount: 3
Metadata: {}
Network: "visa"
Source: "merchant-card/6675871284854784"
Status: "confirmed"
Tags: ["purchase_1234"]
Updated: "2025-01-30 20:44:06.470183 +0000 +0000"
}      

Clojure

{:id "4600131349381120",
:amount 500,
:billing-city "",
:billing-country-code "",
:billing-state-code "",
:billing-street-line-1 "",
:billing-street-line-2 "",
:billing-zip-code "",
:card-ending "0005",
:card-id "6675871284854784",
:challenge-mode "disabled",
:challenge-url "",
:created "2025-01-30T18:52:55.315590+00:00",
:currency-code "BRL",
:end-to-end-id "33c022ec-2c54-46e5-b20b-eb10edfaf021",
:fee 160,
:funding-type "credit",
:holder-email "",
:holder-name "Rlain Listener",
:holder-phone "",
:installment-count 3,
:metadata {},
:network "visa",
:source "merchant-card/6675871284854784",
:status "confirmed",
:tags ["purchase_1234"],
:updated "2025-01-30T20:44:06.470183+00:00"}      

Curl

{
    "message": "Merchant Purchase successfully patched",
    "purchase": {
        "amount": 500,
        "billingCity": "",
        "billingCountryCode": "",
        "billingStateCode": "",
        "billingStreetLine1": "",
        "billingStreetLine2": "",
        "billingZipCode": "",
        "cardEnding": "4389",
        "cardId": "6344640227704832",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2025-01-27T17:11:14.728475+00:00",
        "currencyCode": "BRL",
        "endToEndId": "1d5747f6-b808-49b4-9458-3bb79f1ff7a3",
        "fee": 19,
        "fundingType": "credit",
        "holderEmail": "",
        "holderName": "Raoden Elantris",
        "holderPhone": "",
        "id": "4600131349381120",
        "installmentCount": 2,
        "metadata": {},
        "network": "elo",
        "source": "merchant-session/4843392886374400",
        "status": "confirmed",
        "tags": [
            "load_test"
        ],
        "updated": "2025-01-30T21:43:35.679222+00:00"
    }
}

Fully Reversing a Merchant Purchase

To fully reverse a Merchant Purchase, its status must be confirmed. This action reverses the entire purchase amount.

While the reversal is being processed, the purchase status remains confirmed. After the full reversal is completed, the status changes to voided.

Python

import starkbank

merchant_purchase = starkbank.merchantpurchase.update(id="4600131349381120", status="reversed", amount=0)

print(merchant_purchase)

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantPurchase = await starkbank.merchantPurchase.update("5426029359267840", {status: 'reversed', amount: 0});
    console.log(merchantPurchase);
})();      

PHP

use StarkBank\MerchantPurchase;

$merchantPurchase = MerchantPurchase::update('4600131349381120', 'reversed', 0);       

print_r($merchantPurchase);      

Java

HashMap<String, Object> patchData = new HashMap<>();
patchData.put("amount", 0);
patchData.put("status", "reversed");

MerchantPurchase merchantPurchase = MerchantPurchase.update("4600131349381120", patchData);

System.out.println(merchantPurchase);

Ruby

require('starkbank')

merchant_purchase = StarkBank::MerchantPurchase.update(
    '6445150473551872',
    {
        "status": 'reversed',
        "amount": 0
    }
)

puts merchant_purchase   

Elixir

merchant_purchase = StarkBank.MerchantPurchase.update!(
    id: "4600131349381120",
    status: "reversed",
    amount: 0
)

merchant_purchase |> IO.inspect   

C#

using StarkBank;
using StarkBank.MerchantPurchase;
using System;

MerchantPurchase merchantPurchase = MerchantPurchase.Update(
    id: "4600131349381120",
    status: "reversed",
    amount: 0
);

Console.WriteLine(merchantPurchase);    

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank"
    MerchantPurchase "github.com/starkbank/sdk-go/starkbank/merchantpurchase"
)

func main() {

    var patchData = map[string]interface{}{}
    patchData["amount"] = 0    
    patchData["status"] = "reversed"

    merchantPurchase, err := MerchantPurchase.Update("4600131349381120", patchData, nil)

    if err.Errors != nil {
        for _, e := range err.Errors {
            fmt.Printf("code: %s, message: %s", e.Code, e.Message)
        }
    }

    fmt.Println(merchantPurchase)
}      

Clojure

(defn update-merchant-purchase []
(let [merchant-purchase (merchant-purchase/update {:id "4600131349381120"
                                                    :status "reversed"
                                                    :amount 0})]
    (println merchant-purchase)))      

Curl

curl --location --request PATCH '{{baseUrl}}/v2/merchant-purchase/4600131349381120' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
--data-raw '{
    "status": "reversed",
    "amount": 0
}'
RESPONSE

Python

MerchantPurchase(
    amount=0,
    billing_city=,
    billing_country_code=,
    billing_state_code=,
    billing_street_line_1=,
    billing_street_line_2=,
    billing_zip_code=,
    card_ending=9272,
    card_id=6549906873384960,
    challenge_mode=disabled,
    challenge_url=,
    created=2025-02-20 21:55:20.974480,
    currency_code=BRL,
    end_to_end_id=5cd3da59-1e22-4a18-bf3a-f1705cb0d504,
    fee=102,
    funding_type=credit,
    holder_email=,
    holder_name=Marasi Colms,
    holder_phone=,
    id=4854800227237888,
    installment_count=3,
    metadata={},
    network=hipercard,
    source=merchant-card/6549906873384960,
    status=confirmed,
    tags=[],
    updated=2025-02-20 22:48:39.332330
)

Javascript

MerchantPurchase {
  id: '5426029359267840',
  amount: 0,
  installmentCount: 1,
  holderName: 'Margaery Tyrell',
  holderEmail: '',
  holderPhone: '',
  fundingType: 'credit',
  billingCountryCode: '',
  billingCity: '',
  billingStateCode: '',
  billingStreetLine1: '',
  billingStreetLine2: '',
  billingZipCode: '',
  metadata: {},
  cardEnding: '1625',
  cardId: '5113758527520768',
  challengeMode: 'disabled',
  challengeUrl: '',
  created: '2025-02-13T19:58:08.966057+00:00',
  currencyCode: 'BRL',
  endToEndId: '18ca33bd-2c3c-4196-8a8f-8970bf993c49',
  fee: 24,
  network: 'diners',
  source: 'merchant-session/5727650257567744',
  status: 'paid',
  tags: [ 'yourtags' ],
  updated: '2025-02-20T20:19:48.001292+00:00'
}      

PHP

StarkBank\MerchantPurchase Object
(
  [id] => 4600131349381120
  [amount] => 0
  [billingCity] => 
  [billingCountryCode] => 
  [billingStateCode] => 
  [billingStreetLine1] => 
  [billingStreetLine2] => 
  [billingZipCode] => 
  [cardEnding] => 0005
  [cardId] => 6675871284854784
  [challengeMode] => disabled
  [challengeUrl] => 
  [created] => DateTime Object
      (
          [date] => 2025-01-30 18:52:55.315590
          [timezone_type] => 1
          [timezone] => +00:00
      )
  [currencyCode] => BRL
  [endToEndId] => 33c022ec-2c54-46e5-b20b-eb10edfaf021
  [fee] => 160
  [fundingType] => credit
  [holderEmail] => 
  [holderName] => Rlain Listener
  [holderPhone] => 
  [installmentCount] => 3
  [metadata] => Array
      (
      )
  [network] => visa
  [source] => merchant-card/6675871284854784
  [status] => confirmed
  [tags] => Array
      (
          [0] => purchase_1234
      )
  [updated] => DateTime Object
      (
          [date] => 2025-01-30 20:44:06.470183
          [timezone_type] => 1
          [timezone] => +00:00
      )
)      

Java

MerchantPurchase({
  "id": "4600131349381120",
  "amount": 0,
  "billingCity": "",
  "billingCountryCode": "",
  "billingStateCode": "",
  "billingStreetLine1": "",
  "billingStreetLine2": "",
  "billingZipCode": "",
  "cardId": "6675871284854784",
  "cardEnding": "0005",
  "challengeMode": "disabled",
  "challengeUrl": "",
  "created": "2025-01-30T18:52:55.315590+00:00",
  "currencyCode": "BRL",
  "endToEndId": "33c022ec-2c54-46e5-b20b-eb10edfaf021",
  "fee": 160,
  "fundingType": "credit",
  "holderEmail": "",
  "holderName": "Rlain Listener",
  "holderPhone": "",
  "installmentCount": 3,
  "metadata": {},
  "network": "visa",
  "source": "merchant-card/6675871284854784",
  "status": "confirmed",
  "tags": ["purchase_1234"],
  "updated": "2025-01-30T20:44:06.470183+00:00"
})      

Ruby

merchantpurchase(
    id: 6445150473551872,
    amount: 0,
    billing_city: ,
    billing_country_code: ,
    billing_state_code: ,
    billing_street_line1: ,
    billing_street_line2: ,
    billing_zip_code: ,
    card_ending: ,
    card_id: ,
    challenge_mode: ,
    challenge_url: ,
    created: 2025-02-10T05:25:21+00:00,
    currency_code: ,
    end_to_end_id: ,
    fee: 24,
    funding_type: ,
    holder_email: ,
    holder_name: ,
    holder_phone: ,
    installment_count: ,
    metadata: {},
    network: diners,
    source: merchant-session/4504180932739072,
    status: paid,
    tags: ["stark", "suit"],
    updated: 2025-02-20T22:21:47+00:00
)      

Elixir

%StarkBank.MerchantPurchase{
  id: "4600131349381120",
  amount: 0,
  billing_city: "",
  billing_country_code: "",
  billing_state_code: "",
  billing_street_line_1: "",
  billing_street_line_2: "",
  billing_zip_code: "",
  card_id: "6675871284854784",
  card_ending: "0005",
  challenge_mode: "disabled",
  challenge_url: "",
  created: ~U[2025-01-30 18:52:55.315590Z],
  currency_code: "BRL",
  end_to_end_id: "33c022ec-2c54-46e5-b20b-eb10edfaf021",
  fee: 160,
  funding_type: "credit",
  holder_email: "",
  holder_name: "Rlain Listener",
  holder_phone: "",
  installment_count: 3,
  metadata: %{},
  network: "visa",
  source: "merchant-card/6675871284854784",
  status: "confirmed",
  tags: ["purchase_1234"],
  updated: ~U[2025-01-30 20:44:06.470183Z]
}      

C#

MerchantPurchase(
    Amount: 5000,
    FundingType: credit,
    CardId: ,
    InstallmentCount: 1,
    HolderEmail: margaery.tyrell@email.com,
    HolderPhone: 11998663456,
    HolderName: Rlain Listener,
    BillingCountryCode: BRA,
    BillingCity: Sao Paulo,
    BillingStateCode: SP,
    BillingStreetLine1: Rua do Jardim de cima, 123,
    BillingStreetLine2: 1 andar,
    BillingZipCode: 11111-111,
    ChallengeMode: enabled,
    Metadata: {},
    CardEnding: 0007,
    ChallengeUrl: ,
    Created: 2/21/2025 3:47:24 AM,
    CurrencyCode: BRL,
    EndToEndId: dd4c0e93-0cd9-4fd4-9362-27db12e90244,
    Fee: 0,
    Network: mastercard,
    Source: merchant-session/6022753526218752,
    Status: paid,
    Tags: { yourtags },
    Updated: 2/21/2025 3:47:27 AM,
    ID: 4600131349381120
)     

Go

{
  Id: "4600131349381120"
  Amount: 0
  BillingCity: ""
  BillingCountryCode: ""
  BillingStateCode: ""
  BillingStreetLine1: ""
  BillingStreetLine2: ""
  BillingZipCode: ""
  CardEnding: "0005"
  CardId: "6675871284854784"
  ChallengeMode: "disabled"
  ChallengeUrl: ""
  Created: "2025-01-30 18:52:55.315590 +0000 +0000"
  CurrencyCode: "BRL"
  EndToEndId: "33c022ec-2c54-46e5-b20b-eb10edfaf021"
  Fee: 160
  FundingType: "credit"
  HolderEmail: ""
  HolderName: "Rlain Listener"
  HolderPhone: ""
  InstallmentCount: 3
  Metadata: {}
  Network: "visa"
  Source: "merchant-card/6675871284854784"
  Status: "confirmed"
  Tags: ["purchase_1234"]
  Updated: "2025-01-30 20:44:06.470183 +0000 +0000"
}      

Clojure

{:id "4600131349381120",
:amount 0,
:billing-city "",
:billing-country-code "",
:billing-state-code "",
:billing-street-line-1 "",
:billing-street-line-2 "",
:billing-zip-code "",
:card-ending "0005",
:card-id "6675871284854784",
:challenge-mode "disabled",
:challenge-url "",
:created "2025-01-30T18:52:55.315590+00:00",
:currency-code "BRL",
:end-to-end-id "33c022ec-2c54-46e5-b20b-eb10edfaf021",
:fee 160,
:funding-type "credit",
:holder-email "",
:holder-name "Rlain Listener",
:holder-phone "",
:installment-count 3,
:metadata {},
:network "visa",
:source "merchant-card/6675871284854784",
:status "confirmed",
:tags ["purchase_1234"],
:updated "2025-01-30T20:44:06.470183+00:00"}      

Curl

{
    "message": "Merchant Purchase successfully patched",
    "purchase": {
        "amount": 0,
        "billingCity": "",
        "billingCountryCode": "",
        "billingStateCode": "",
        "billingStreetLine1": "",
        "billingStreetLine2": "",
        "billingZipCode": "",
        "cardEnding": "0005",
        "cardId": "6675871284854784",
        "challengeMode": "disabled",
        "challengeUrl": "",
        "created": "2025-01-30T20:53:27.929235+00:00",
        "currencyCode": "BRL",
        "endToEndId": "6a8edc92-4312-474b-824c-86c283016103",
        "fee": 160,
        "fundingType": "credit",
        "holderEmail": "",
        "holderName": "Rlain Listener",
        "holderPhone": "",
        "id": "4600131349381120",
        "installmentCount": 3,
        "metadata": {},
        "network": "visa",
        "source": "merchant-card/6675871284854784",
        "status": "confirmed",
        "tags": [
            "purchase_1234"
        ],
        "updated": "2025-01-30T21:46:52.860865+00:00"
    }
}

Receiving Purchase Webhook

Approved Webhook Example

RESPONSE

Python

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Javascript

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

PHP

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Java

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Ruby

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Elixir

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

C#

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Go

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Clojure

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Curl

{
    "event": {
        "created": "2025-02-07T18:10:11.366447+00:00",
        "id": "5071103271632896",
        "log": {
            "created": "2025-02-07T18:10:11.032562+00:00",
            "errors": [],
            "id": "5819491019653120",
            "purchase": {
                "amount": 1000,
                "billingCity": "",
                "billingCountryCode": "",
                "billingStateCode": "",
                "billingStreetLine1": "",
                "billingStreetLine2": "",
                "billingZipCode": "",
                "cardEnding": "1625",
                "cardId": "5546875822276608",
                "challengeMode": "disabled",
                "challengeUrl": "",
                "created": "2025-02-07T18:10:05.957300+00:00",
                "currencyCode": "BRL",
                "endToEndId": "e34088f4-6266-4f9e-a361-67e454dedcc9",
                "fee": 0,
                "fundingType": "credit",
                "holderEmail": "",
                "holderName": "Margaery Tyrell",
                "holderPhone": "",
                "id": "5807002060062720",
                "installmentCount": 1,
                "metadata": {},
                "network": "diners",
                "source": "merchant-session/5640051111231488",
                "status": "approved",
                "tags": [],
                "updated": "2025-02-07T18:10:11.032593+00:00"
            },
            "transactionId": null,
            "type": "approved",
            "updated": "2025-02-07T18:10:11.032597+00:00"
        }
    },
    "subscription": "merchant-purchase",
    "workspaceId": "6314371953197056"
}

Merchant Installment Overview

When you create a Merchant Purchase, you can choose to receive it in one installment or split it into multiple installments.

Each installment is tracked as a Merchant Installment, which helps you monitor when each payment is due and which ones have already been credited.

Once an installment is paid, you'll receive a credit log with the transaction ID that appears on your statement.

The Merchant Installment Status

A Merchant Installment has the following life cycle:

merchant-installment-status

StatusDescription
CreatedThe Merchant Installment was created.
PaidThe Merchant Installment was paid to your account.
CanceledThe Merchant Installment was canceled.
VoidedThe Merchant Installment was voided.

The Merchant Installment Logs

Every time a Merchant Installment changes, we create a Log. Logs are useful for understanding the life cycle of each installment. Whenever a new Log is created, we'll send a webhook to your registered URL.

Check out this diagram to understand the possible Merchant Installment Logs:

merchant-installment-log

Log typeStatusDescription
CreatedCreatedThe Merchant Installment was created in Stark Bank.
PaidPaidThe Merchant Installment was paid to your account.
CanceledCanceledThe Merchant Installment was canceled.
VoidedVoidedThe Merchant Installment was voided.

Note: You only receive these webhooks if you have the merchant-installment subscription set.

The Merchant Installment object

Attributes

id STRING

Unique id for the merchant installment.

amount INTEGER

Installment amount in cents.

created STRING

Creation datetime. Example: "2020-04-23T23:00:00.000000+00:00".

due STRING

Expected settlement date. Example: "2020-04-23T23:00:00.000000+00:00".

fee INTEGER

Fee charged in cents.

fundingType STRING

Funding type. Options: "credit", "debit".

network STRING

Card network.

purchaseId STRING

ID of the Merchant Purchase linked to the installment.

status STRING

Current installment status. Options: "created", "paid", "canceled", "voided".

tags LIST OF STRINGS

Tags associated with the installment.

transactionIds LIST OF STRINGS

Ledger transaction IDs linked to the installment.

updated STRING

Last update datetime. Example: "2020-04-23T23:00:00.000000+00:00".

Querying Merchant Installments

You can retrieve a Merchant Installment by its ID or even list them using parameters such as limit, after, before to filter the results, as shown in the example below:

Python

import starkbank

merchant_installments = starkbank.merchantinstallment.query(limit=1)

for merchant_installment in merchant_installments:
    print(merchant_installment)
        

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantInstallments = await starkbank.merchantInstallment.query({limit= 1});

    for await (let merchantInstallment of merchantInstallments){
        console.log(merchantInstallment);
    }
})();
    

PHP

use StarkBank\MerchantInstallment;

$merchantInstallments = MerchantInstallment::query(["limit" => 1]);

foreach($merchantInstallments as $merchantInstallment){
    print_r($merchantInstallment);
}
        

Java

import com.starkbank.*;
import com.starkbank.utils.Generator;
import java.util.HashMap;


HashMap<String, Object> params = new HashMap<>();
params.put("limit", 1);
Generator<MerchantInstallment> merchantInstallments = MerchantInstallment.query(params);

for (MerchantInstallment merchantInstallment : merchantInstallments) {
    System.out.println(merchantInstallment);
}
        

Ruby

require 'starkbank'

merchantInstallments = StarkBank::MerchantInstallment.query(limit: 1)

merchantInstallments.each do |merchantInstallment|
    puts merchantInstallment
end
        

Elixir

merchantInstallments = StarkBank.MerchantInstallment.query!(limit: 1)

for merchantInstallment <- merchantInstallments do
    merchantInstallment |> IO.inspect
end
        

C#

using System;
using StarkBank;

List<MerchantInstallment> merchantInstallments = MerchantInstallment.Query(limit: 1).ToList();

foreach (MerchantInstallment merchantInstallment in merchantInstallments)
{
    Console.WriteLine(merchantInstallment);
}
        

Go

package main

import (
    "fmt"
    MerchantInstallment "github.com/starkbank/sdk-go/starkbank/merchantinstallment"
)

func main() {

    var params = map[string]interface{}{}
    params["limit"] = 1

    merchantinstallments, errorChannel := MerchantInstallment.Query(params, nil)

    loop:
    for {
        select {
        case err := <-errorChannel:
            if err.Errors != nil {
                for _, e := range err.Errors {
                    fmt.Printf("code: %s, message: %s", e.Code, e.Message)
                }
            }
        case merchantinstallment, ok := <-merchantinstallments:
            if !ok {
                break loop
            }
            fmt.Printf("%+v", merchantinstallment)
        }
    }
}
        

Clojure

(def merchant-installments
  (starkbank.merchant-installment/query
    {
      :limit 1
    }))
(dorun (map println merchant-installments))
        

Curl

curl --location --request GET '{{baseUrl}}/v2/merchant-installment' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
    
RESPONSE

Python

MerchantInstallment(
    amount=1000,
    created=2025-02-20 20:01:58.529828,
    due=2025-05-21 03:00:00.529828,
    fee=16,
    funding_type=credit,
    id=4848075206033408,
    network=mastercard,
    purchase_id=5559970598748160,
    status=paid,
    tags=[],
    transaction_ids=["38502321313064121177062848528552"],
    updated=2025-02-20 20:02:02.185613
)
        

Javascript

MerchantInstallment {
    id: '4848075206033408',
    amount: 1000,
    fee: 16,
    fundingType: 'credit',
    network: 'mastercard',
    purchaseId: '5559970598748160',
    status: 'paid',
    transactionIds: ['38502321313064121177062848528552'],
    tags: [],
    due: '2025-05-21T03:00:00+00:00',
    created: '2025-02-20T20:01:58.529828+00:00',
    updated: '2025-02-20T20:02:02.185613+00:00'
}
    

PHP

StarkBank\MerchantInstallment Object
(
    [id] => 5823924298317824
    [amount] => 1000
    [created] => DateTime Object
        (
            [date] => 2025-02-12 04:01:53.170457
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [due] => DateTime Object
        (
            [date] => 2025-03-13 03:00:00
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [fee] => 24
    [fundingType] => credit
    [network] => diners
    [purchaseId] => 5798109464494080
    [status] => paid
    [tags] => Array
        (
        )
    [transactionIds] => Array
        (
            [0] => 38502321313064121177062848528552
        )
    [updated] => DateTime Object
        (
            [date] => 2025-02-12 06:00:17.047231
            [timezone_type] => 1
            [timezone] => +00:00
        )
)
        

Java

MerchantInstallment({
  "amount": 1000,
  "created": "2025-02-12T04:01:53.170457+00:00",
  "due": "2025-03-13T03:00:00+00:00",
  "fee": 24,
  "fundingType": "credit",
  "network": "diners",
  "purchaseId": "5798109464494080",
  "status": "paid",
  "tags": [],
  "transactionIds": [
    "38502321313064121177062848528552"
  ],
  "updated": "2025-02-12T06:00:17.047231+00:00",
  "id": "5823924298317824"
})
        

Ruby

merchantinstallment(
    id: 4881709363363840,
    amount: 5000,
    fundingType: ,
    purchaseId: ,
    due: 2025-03-21T03:00:00+00:00,
    created: 2025-02-20T23:16:10+00:00,
    fee: 120,
    network: diners,
    status: paid,
    tags: ["stark", "suit"],
    transactionIds: ["38502321313064121177062848528552"],
    updated: 2025-02-21T00:00:05+00:00
)
        

Elixir

%StarkBank.MerchantInstallment{
    amount: 1000,
    created: ~U[2025-02-12T04:01:53.170457Z],
    due: ~U[2025-03-13T03:00:00Z],
    fee: 24,
    funding_type: "credit",
    network: "diners",
    purchase_id: "5798109464494080",
    status: "paid",
    tags: [],
    transaction_ids: ["38502321313064121177062848528552"],
    updated: ~U[2025-02-12T06:00:17.047231Z],
    id: "5823924298317824"
}
        

C#

MerchantInstallment(
    Amount: 1000,
    Created: 2/21/2025 12:10:48 AM,
    Due: 3/24/2025 12:00:00 AM,
    Fee: 16,
    FundingType: credit,
    Network: mastercard,
    PurchaseId: 5917035389255680,
    Status: created,
    Tags: {  },
    TransactionIds: { 38502321313064121177062848528552 },
    Updated: 2/21/2025 12:10:50 AM,
    ID: 6717676390973440
)
        

Go

{
    Id: "5823924298317824",
    Amount: 1000,
    Created: "2025-02-12T04:01:53.170457+00:00",
    Due: "2025-03-13T03:00:00+00:00",
    Fee: 24,
    FundingType: "credit",
    Network: "diners",
    PurchaseId: "5798109464494080",
    Status: "paid",
    Tags: [],
    TransactionIds: ["38502321313064121177062848528552"],
    Updated: "2025-02-12T06:00:17.047231+00:00"
}
        

Clojure

{:amount 1000,
 :created "2025-02-12T04:01:53.170457+00:00",
 :due "2025-03-13T03:00:00+00:00",
 :fee 24,
 :funding-type "credit",
 :network "diners",
 :purchase-id "5798109464494080",
 :status "paid",
 :tags [],
 :transaction-ids ["38502321313064121177062848528552"],
 :updated "2025-02-12T06:00:17.047231+00:00",
 :id "5823924298317824"}
        

Curl

    {
        "cursor": "ClcKFAoHY3JlYXRlZBIJCKDD2tebqYcDEjtqGml-YXBpLW1zLWNhcmQtbWVyY2hhbnQtc2J4ch0LEhBNZXJjaGFudFB1cmNoYXNlGICAgNil4boIDBgAIAE=",
        "installments": [
            {
                "amount": 1000,
                "created": "2025-02-12T21:36:20.489713+00:00",
                "due": "2024-10-07T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4584324594663424",
                "network": "mastercard",
                "purchaseId": "6237525488173056",
                "status": "created",
                "tags": [],
                "transactionIds": ["38502321313064121177062848528552"],
                "updated": "2024-09-06T21:36:20.911595+00:00"
            }
        ]
    }
    

Querying Merchant Installment Logs

You can retrieve Merchant Installment Logs by using parameters such as limit, after, before to filter the results, as shown in the example below:

Each log tracks a status change in the installment's life cycle.

Python

import starkbank

merchant_installment_logs = starkbank.merchantinstallment.log.query(limit=1)

for log in merchant_installment_logs:
    print(log)
        

Javascript

const starkbank = require('starkbank');

(async() => {
    let merchantInstallments = await starkbank.merchantInstallment.log.query({limit: 1});

    for await (let merchantInstallment of merchantInstallments){
        console.log(merchantInstallment);
    }
})();
    

PHP

use StarkBank\MerchantInstallment\Log;

$logs = Log::query(["limit" => 1]);

foreach($logs as $log){
    print_r($log);
}
        

Java

import com.starkbank.*;
import com.starkbank.utils.Generator;
import java.util.HashMap;


HashMap<String, Object> params = new HashMap<>();
params.put("limit", 1);
Generator<MerchantInstallment.Log> logs = MerchantInstallment.Log.query(params);

for (MerchantInstallment.Log log : logs) {
    System.out.println(log);
}
        

Ruby

require 'starkbank'

logs = StarkBank::MerchantInstallment::Log.query(limit: 1)

logs.each do |log|
    puts log
end
        

Elixir

logs = StarkBank.MerchantInstallment.Log.query!(limit: 1)

for log <- logs do
    log |> IO.inspect
end
        

C#

using System;
using StarkBank;

List<MerchantInstallment.Log> logs = MerchantInstallment.Log.Query(limit: 1).ToList();

foreach (MerchantInstallment.Log log in logs)
{
    Console.WriteLine(log);
}
        

Go

package main

import (
    "fmt"
    "github.com/starkbank/sdk-go/starkbank/merchantinstallment/log"
)

func main() {

    var params = map[string]interface{}{}
    params["limit"] = 1

    logs, errorChannel := log.Query(params, nil)

    loop:
    for {
        select {
        case err := <-errorChannel:
            if err.Errors != nil {
                for _, e := range err.Errors {
                    fmt.Printf("code: %s, message: %s", e.Code, e.Message)
                }
            }
        case log, ok := <-logs:
            if !ok {
                break loop
            }
            fmt.Printf("%+v", log)
        }
    }
}
        

Clojure

(def logs
  (starkbank.merchant-installment.log/query
    {
      :limit 1
    }))
(dorun (map println logs))
        

Curl

curl --location --request GET '{{baseUrl}}/v2/merchant-installment/log' 
--header 'Access-Id: {{accessId}}' 
--header 'Access-Time: {{accessTime}}' 
--header 'Access-Signature: {{accessSignature}}' 
--header 'Content-Type: application/json' 
    
RESPONSE

Python

Log(
    created=2025-02-20 21:05:03.520701,
    errors=[],
    id=6218715502739456,
    installment=MerchantInstallment(
        amount=5000,
        created=2025-02-20 21:05:03.515855,
        due=2025-03-21 03:00:00,
        fee=60,
        funding_type=credit,
        id=5092815595896832,
        network=mastercard,
        purchase_id=6332003586670592,
        status=created,
        tags=[],
        transaction_ids=[],
        updated=2025-02-20 21:05:04.705022
    ),
    type=created,
    updated=2025-02-20 21:05:04.720418
)
        

Javascript

Log {
    id: '6536925066297344',
    created: '2025-02-20T20:01:58.538986+00:00',
    type: 'created',
    errors: [],
    installment: {
        amount: 1000,
        created: '2025-02-20T20:01:58.529828+00:00',
        due: '2025-05-21T03:00:00+00:00',
        fee: 16,
        fundingType: 'credit',
        id: '4848075206033408',
        network: 'mastercard',
        purchaseId: '5559970598748160',
        status: 'created',
        tags: [],
        transactionIds: [],
        updated: '2025-02-20T20:02:02.212054+00:00'
    },
    updated: '2025-02-20T20:02:02.212061+00:00'
}
    

PHP

StarkBank\MerchantInstallment\Log Object
(
    [created] => DateTime Object
        (
            [date] => 2024-09-09T03:00:04.754608+00:00
            [timezone_type] => 1
            [timezone] => +00:00
        )
    [errors] => Array
        (
        )
    [id] => 5177774721466368
    [installment] => StarkBank\MerchantInstallment Object
        (
            [amount] => 122
            [created] => 2024-09-06T18:37:42.445978+00:00
            [due] => 2024-09-09T03:00:00+00:00
            [fee] => 3
            [fundingType] => credit
            [id] => 6147068645081088
            [network] => mastercard
            [purchaseId] => 6224062846074880
            [status] => paid
            [tags] => Array
                (
                )
            [transactionIds] => Array
                (
                    [0] => 53962437879807990290615252629327
                )
            [updated] => 2024-09-09T03:00:05.126276+00:00
        )
    [type] => credited
    [updated] => DateTime Object
        (
            [date] => 2024-09-09T03:00:05.126321+00:00
            [timezone_type] => 1
            [timezone] => +00:00
        )
)
        

Java

MerchantInstallment.Log({
    "created": "2024-09-09T03:00:04.754608+00:00",
    "errors": [],
    "id": "5177774721466368",
    "installment": {
        "amount": 122,
        "created": "2024-09-06T18:37:42.445978+00:00",
        "due": "2024-09-09T03:00:00+00:00",
        "fee": 3,
        "fundingType": "credit",
        "id": "6147068645081088",
        "network": "mastercard",
        "purchaseId": "6224062846074880",
        "status": "paid",
        "tags": [],
        "transactionIds": [
            "53962437879807990290615252629327"
        ],
        "updated": "2024-09-09T03:00:05.126276+00:00"
    },
    "type": "credited",
    "updated": "2024-09-09T03:00:05.126321+00:00"
})
        

Ruby

log(
    id: 6754756320034816,
    created: 2025-02-21T00:00:33+00:00,
    type: credited,
    errors: [],
    installment: merchantinstallment(
        id: 5019869871341568,
        amount: 2000,
        fundingType: ,
        purchaseId: ,
        due: 2025-07-21T03:00:00+00:00,
        created: 2025-02-20T22:18:28+00:00,
        fee: 32,
        network: mastercard,
        status: paid,
        tags: [],
        transactionIds: ,
        updated: 2025-02-21T00:00:39+00:00
    )
)
        

Elixir

%MerchantInstallment.Log{
    created: ~U[2024-09-09T03:00:04.754608Z],
    errors: [],
    id: "5177774721466368",
    installment: %{
        amount: 122,
        created: ~U[2024-09-06T18:37:42.445978Z],
        due: ~U[2024-09-09T03:00:00Z],
        fee: 3,
        funding_type: "credit",
        id: "6147068645081088",
        network: "mastercard",
        purchase_id: "6224062846074880",
        status: "paid",
        tags: [],
        transaction_ids: [
            "53962437879807990290615252629327"
        ],
        updated: ~U[2024-09-09T03:00:05.126276Z]
    },
    type: "credited",
    updated: ~U[2024-09-09T03:00:05.126321Z]
}
        

C#

Log(
    Created: 2/21/2025 12:10:48 AM,
    Type: created,
    Errors: {  },
    Installment: MerchantInstallment(
        Amount: 1000,
        Created: 2/21/2025 12:10:48 AM,
        Due: 3/24/2025 12:00:00 AM,
        Fee: 16,
        FundingType: credit,
        Network: mastercard,
        PurchaseId: 5917035389255680,
        Status: created,
        Tags: {  },
        TransactionIds: {  },
        Updated: 2/21/2025 12:10:50 AM,
        ID: 6717676390973440
    ),
    ID: 5134379646976000
)
        

Go

{
    Id: "5177774721466368",
    Installment: {
        Amount: 122,
        Created: "2024-09-06T18:37:42.445978+00:00",
        Due: "2024-09-09T03:00:00+00:00",
        Fee: 3,
        FundingType: "credit",
        Id: "6147068645081088",
        Network: "mastercard",
        PurchaseId: "6224062846074880",
        Status: "paid",
        Tags: [],
        TransactionIds: ["53962437879807990290615252629327"],
        Updated: "2024-09-09T03:00:05.126276+00:00"
    },
    Created: "2024-09-09T03:00:04.754608+00:00",
    Errors: [],
    Type: "credited",
    Updated: "2024-09-09T03:00:05.126321+00:00"
}
        

Clojure

{:created "2024-09-09T03:00:04.754608+00:00",
 :errors [],
 :id "5177774721466368",
 :installment {:amount 122,
               :created "2024-09-06T18:37:42.445978+00:00",
               :due "2024-09-09T03:00:00+00:00",
               :fee 3,
               :funding-type "credit",
               :id "6147068645081088",
               :network "mastercard",
               :purchase-id "6224062846074880",
               :status "paid",
               :tags [],
               :transaction-ids ["53962437879807990290615252629327"],
               :updated "2024-09-09T03:00:05.126276+00:00"},
 :type "credited",
 :updated "2024-09-09T03:00:05.126321+00:00"}
        

Curl

{
    "cursor": "CloKFAoHY3JlYXRlZBIJCO2hw9uorIcDEj5qGml-YXBpLW1zLWNhcmQtbWVyY2hhbnQtc2J4ciALEhNNZXJjaGFudFB1cmNoYXNlTG9nGICAgJj1qIsKDBgAIAE=",
    "logs": [
        {
            "created": "2024-09-09T03:00:04.754608+00:00",
            "errors": [],
            "id": "5177774721466368",
            "installment": {
                "amount": 122,
                "created": "2024-09-06T18:37:42.445978+00:00",
                "due": "2024-09-09T03:00:00+00:00",
                "fee": 3,
                "fundingType": "credit",
                "id": "6147068645081088",
                "network": "mastercard",
                "purchaseId": "6224062846074880",
                "status": "paid",
                "tags": [],
                "transactionIds": [
                    "53962437879807990290615252629327"
                ],
                "updated": "2024-09-09T03:00:05.126276+00:00"
            },
            "type": "credited",
            "updated": "2024-09-09T03:00:05.126321+00:00"
        }
    ]
}
    

Receiving Installment Webhook

Listen to Merchant Installment Webhooks

After creation, you can use asynchronous Webhooks to monitor status changes of the entity. The Merchant Installment follows this life cycle:

Every time a Merchant Installment changes, we create a Log. Logs are useful for understanding the life cycle of each Merchant Installment. Whenever a new Log is created, we'll send a webhook to your registered URL.

RESPONSE

Python

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Javascript

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

PHP

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Java

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Ruby

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Elixir

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

C#

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Go

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Clojure

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}

Curl

{
    "event": {
        "created": "2025-02-07T18:10:17.252501+00:00",
        "id": "5498780780593152",
        "log": {
            "created": "2025-02-07T18:10:16.773289+00:00",
            "errors": [],
            "id": "5653442013954048",
            "installment": {
                "amount": 1000,
                "created": "2025-02-07T18:10:16.768457+00:00",
                "due": "2025-03-10T03:00:00+00:00",
                "fee": 24,
                "fundingType": "credit",
                "id": "4527542107111424",
                "network": "diners",
                "purchaseId": "5807002060062720",
                "status": "created",
                "tags": [],
                "transactionIds": [],
                "updated": "2025-02-07T18:10:16.773320+00:00"
            },
            "type": "created",
            "updated": "2025-02-07T18:10:16.773325+00:00"
        },
        "subscription": "merchant-installment",
        "workspaceId": "6314371953197056"
    }
}