Skip to content

Readers

SumUp API reference and code samples.

Readers

A reader represents a device that accepts payments. You can use the SumUp Solo to accept in-person payments.

The Reader object

A physical card reader device that can accept in-person payments.

Reader

  • id string min length: 30max length: 30 required

    Unique identifier of the object.

    Note that this identifies the instance of the physical devices pairing with your SumUp account. If you delete a reader, and pair the device again, the ID will be different. Do not use this ID to refer to a physical device.

    Example: "rdr_3MSAFM23CK82VSTT4BN6RWSQ65"
  • name string max length: 500 required

    Custom human-readable, user-defined name for easier identification of the reader.

    Example: "Frontdesk"
  • status string required

    The status of the reader object gives information about the current state of the reader.

    Possible values:

    • unknown - The reader status is unknown.
    • processing - The reader is created and waits for the physical device to confirm the pairing.
    • paired - The reader is paired with a merchant account and can be used with SumUp APIs.
    • expired - The pairing is expired and no longer usable with the account. The resource needs to get recreated.
    Example: "paired"
  • device object required

    Information about the underlying physical device.

     Show attributes
     Close
    Attributes
    • identifier string required

      A unique identifier of the physical device (e.g. serial number).

      Example: "U1DT3NA00-CN"
    • model string required
      Options:  solo virtual-solo

      Identifier of the model of the device.

      Example: "solo"
  • metadata object max properties: 64

    Set of user-defined key-value pairs attached to the object. Partial updates are not supported. When updating, always submit whole metadata. Maximum of 64 parameters are allowed in the object.

    Example: {}
  • service_account_id string uuid

    Identifier of the system-managed service account associated with this reader. Present only for readers that are already paired. This field is currently in beta and may change.

  • created_at string date-time required

    The timestamp of when the reader was created.

    Example: "2023-01-18T15:16:17Z"
  • updated_at string date-time required

    The timestamp of when the reader was last updated.

    Example: "2023-01-20T15:16:17Z"
The Reader object
{
"id": "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
"name": "Frontdesk",
"status": "paired",
"device": {
"identifier": "U1DT3NA00-CN",
"model": "solo"
},
"metadata": {},
"service_account_id": null,
"created_at": "2023-01-18T15:16:17Z",
"updated_at": "2023-01-20T15:16:17Z"
}
Readers

List Readers

List all readers of the merchant.

Required scopes: readers.read
Required permissions: readers_list

Path Parameters

  • merchant_code string required

    Short unique identifier for the merchant.

    Example: "MK10CL2A"
GET /v0.1/merchants/{merchant_code}/readers
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers \
-X GET \
-H "Authorization: Bearer $SUMUP_API_KEY"
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.list("MK10CL2A");
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.ListAsync(
"MK10CL2A"
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().listReaders(
"MK10CL2A"
);
from sumup import Sumup
client = Sumup()
result = client.readers.list("MK10CL2A")
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->list('MK10CL2A');
client := sumup.NewClient()
result, err := client.Readers.List(context.Background(), "MK10CL2A")
use sumup::Client;
let client = Client::default();
let result = client.readers().list("MK10CL2A").await;
List Readers response
{
"items": [
{
"id": "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
"name": "Frontdesk",
"status": "paired",
"device": {
"identifier": "U1DT3NA00-CN",
"model": "solo"
},
"metadata": {},
"service_account_id": null,
"created_at": "2023-01-18T15:16:17Z",
"updated_at": "2023-01-20T15:16:17Z"
}
]
}
Readers

Create a Reader

Create a new Reader for the merchant account.

Required scopes: readers.write
Required permissions: readers_create

Path Parameters

  • merchant_code string required

    Short unique identifier for the merchant.

    Example: "MK10CL2A"

Body Parameters

  • pairing_code string min length: 8max length: 9 required

    The pairing code is a 8 or 9 character alphanumeric string that is displayed on a SumUp Device after initiating the pairing. It is used to link the physical device to the created pairing.

    Example: "4WLFDSBF"
  • name string max length: 500 required

    Custom human-readable, user-defined name for easier identification of the reader.

    Example: "Frontdesk"
  • metadata object max properties: 64

    Set of user-defined key-value pairs attached to the object. Partial updates are not supported. When updating, always submit whole metadata. Maximum of 64 parameters are allowed in the object.

    Example: {}

Response 400

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

Response 404

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

Response 409

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

POST /v0.1/merchants/{merchant_code}/readers
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers \
-X POST \
-H "Authorization: Bearer $SUMUP_API_KEY" \
--json '{
"pairing_code": "4WLFDSBF",
"name": "Frontdesk"
}'
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.create("MK10CL2A", {
pairing_code: "4WLFDSBF",
name: "Frontdesk",
});
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.CreateAsync(
"MK10CL2A",
new CreateReaderBody
{
PairingCode = "4WLFDSBF",
Name = "Frontdesk",
}
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().createReader(
"MK10CL2A",
CreateReaderBody.builder()
.pairingCode("4WLFDSBF")
.name("Frontdesk")
.build()
);
from sumup import Sumup
client = Sumup()
result = client.readers.create("MK10CL2A", CreateReaderBody(
pairing_code="4WLFDSBF",
name="Frontdesk",
))
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->create('MK10CL2A', [
'pairing_code' => '4WLFDSBF',
'name' => 'Frontdesk',
]);
client := sumup.NewClient()
result, err := client.Readers.Create(context.Background(), "MK10CL2A", sumup.ReadersCreateParams{
PairingCode: "4WLFDSBF",
Name: "Frontdesk",
})
use sumup::Client;
let client = Client::default();
let result = client.readers().create("MK10CL2A", sumup::CreateReaderBody{
pairing_code: "4WLFDSBF".to_string(),
name: "Frontdesk".to_string(),
}).await;
Response
{
"id": "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
"name": "Frontdesk",
"status": "processing",
"device": {
"identifier": "U1DT3NA00-CN",
"model": "solo"
},
"created_at": "2023-05-09T14:50:20.214Z",
"updated_at": "2023-05-09T14:52:58.714Z"
}
Readers

Retrieve a Reader

Retrieve a Reader.

Required scopes: readers.read
Required permissions: readers_view

Path Parameters

  • merchant_code string required

    Short unique identifier for the merchant.

    Example: "MK10CL2A"
  • id string min length: 30max length: 30 required

    The unique identifier of the reader.

    Example: "rdr_3MSAFM23CK82VSTT4BN6RWSQ65"

Response 404

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

GET /v0.1/merchants/{merchant_code}/readers/{id}
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{id} \
-X GET \
-H "Authorization: Bearer $SUMUP_API_KEY"
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.get("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65");
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.GetAsync(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65"
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().getReader(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65"
);
from sumup import Sumup
client = Sumup()
result = client.readers.get("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65")
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->get('MK10CL2A', 'rdr_3MSAFM23CK82VSTT4BN6RWSQ65');
client := sumup.NewClient()
result, err := client.Readers.Get(context.Background(), "MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65")
use sumup::Client;
let client = Client::default();
let result = client.readers().get("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65").await;
Retrieve a Reader response
{
"id": "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
"name": "Frontdesk",
"status": "paired",
"device": {
"identifier": "U1DT3NA00-CN",
"model": "solo"
},
"metadata": {},
"service_account_id": null,
"created_at": "2023-01-18T15:16:17Z",
"updated_at": "2023-01-20T15:16:17Z"
}
Readers

Update a Reader

Update a Reader.

Required scopes: readers.write
Required permissions: readers_update

Path Parameters

  • merchant_code string required

    Short unique identifier for the merchant.

    Example: "MK10CL2A"
  • id string min length: 30max length: 30 required

    The unique identifier of the reader.

    Example: "rdr_3MSAFM23CK82VSTT4BN6RWSQ65"

Body Parameters

  • name string max length: 500

    Custom human-readable, user-defined name for easier identification of the reader.

    Example: "Frontdesk"
  • metadata object max properties: 64

    Set of user-defined key-value pairs attached to the object. Partial updates are not supported. When updating, always submit whole metadata. Maximum of 64 parameters are allowed in the object.

    Example: {}

Response 403

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

Response 404

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

PATCH /v0.1/merchants/{merchant_code}/readers/{id}
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{id} \
-X PATCH \
-H "Authorization: Bearer $SUMUP_API_KEY" \
--json '{}'
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.update("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65", {
});
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.UpdateAsync(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
new UpdateReaderBody
{
}
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().updateReader(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
UpdateReaderBody.builder()
.build()
);
from sumup import Sumup
client = Sumup()
result = client.readers.update("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65", UpdateReaderBody(
))
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->update('MK10CL2A', 'rdr_3MSAFM23CK82VSTT4BN6RWSQ65', [
]);
client := sumup.NewClient()
result, err := client.Readers.Update(context.Background(), "MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65", sumup.ReadersUpdateParams{
})
use sumup::Client;
let client = Client::default();
let result = client.readers().update("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65", sumup::UpdateReaderBody{}).await;
Update a Reader response
{
"id": "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
"name": "Frontdesk",
"status": "paired",
"device": {
"identifier": "U1DT3NA00-CN",
"model": "solo"
},
"metadata": {},
"service_account_id": null,
"created_at": "2023-01-18T15:16:17Z",
"updated_at": "2023-01-20T15:16:17Z"
}
Readers

Delete a reader

Delete a reader.

Required scopes: readers.write
Required permissions: readers_delete

Path Parameters

  • merchant_code string required

    Short unique identifier for the merchant.

    Example: "MK10CL2A"
  • id string min length: 30max length: 30 required

    The unique identifier of the reader.

    Example: "rdr_3MSAFM23CK82VSTT4BN6RWSQ65"

Response 404

  • type string uri required

    A URI reference that identifies the problem type.

    Example: "https://developer.sumup.com/problem/not-found"
  • title string

    A short, human-readable summary of the problem type.

    Example: "Requested resource couldn't be found."
  • status integer

    The HTTP status code generated by the origin server for this occurrence of the problem.

    Example: 404
  • detail string

    A human-readable explanation specific to this occurrence of the problem.

    Example: "The requested resource doesn't exist or does not belong to you."
  • instance string uri

    A URI reference that identifies the specific occurrence of the problem.

DELETE /v0.1/merchants/{merchant_code}/readers/{id}
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{id} \
-X DELETE \
-H "Authorization: Bearer $SUMUP_API_KEY"
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.delete("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65");
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.DeleteAsync(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65"
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().deleteReader(
"MK10CL2A",
"rdr_3MSAFM23CK82VSTT4BN6RWSQ65"
);
from sumup import Sumup
client = Sumup()
result = client.readers.delete("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65")
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->delete('MK10CL2A', 'rdr_3MSAFM23CK82VSTT4BN6RWSQ65');
client := sumup.NewClient()
result, err := client.Readers.Delete(context.Background(), "MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65")
use sumup::Client;
let client = Client::default();
let result = client.readers().delete("MK10CL2A", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65").await;
Readers

Get a Reader Status

Provides the last known status for a Reader.

This endpoint allows you to retrieve updates from the connected card reader, including the current screen being displayed during the payment process and the device status (battery level, connectivity, and update state).

Supported States

  • IDLE – Reader ready for next transaction
  • SELECTING_TIP – Waiting for tip input
  • WAITING_FOR_CARD – Awaiting card insert/tap
  • WAITING_FOR_PIN – Waiting for PIN entry
  • WAITING_FOR_SIGNATURE – Waiting for customer signature
  • UPDATING_FIRMWARE – Firmware update in progress

Device Status

  • ONLINE – Device connected and operational
  • OFFLINE – Device disconnected (last state persisted)

Note: If the target device is a Solo, it must be in version 3.3.39.0 or higher.

Required scopes: readers.read
Required permissions: readers_view

Path Parameters

  • merchant_code string required

    Merchant Code

  • reader_id string required

    The unique identifier of the Reader

BadRequest

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Fuller message giving context to error

    • type string required
      Options:  INVALID_BEARER_TOKEN INVALID_USER_AGENT NOT_ENOUGH_UNPAID_PAYOUTS DUPLICATE_HEADERS

      Key indicating type of error

Unauthorized

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Fuller message giving context to error

    • type string required
      Options:  INVALID_ACCESS_TOKEN INVALID_PASSWORD

      Key indicating type of error

NotFound

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string required

      Fuller message giving context to error

InternalServerError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string required

      Fuller message giving context to error

BadGateway

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string required

      Fuller message giving context to error

GatewayTimeout

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string required

      Fuller message giving context to error

GET /v0.1/merchants/{merchant_code}/readers/{reader_id}/status
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{reader_id}/status \
-X GET \
-H "Authorization: Bearer $SUMUP_API_KEY"
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.getStatus("merchant_code", "reader_id");
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.GetStatusAsync(
"merchant_code",
"reader_id"
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().getReaderStatus(
"merchant_code",
"reader_id"
);
from sumup import Sumup
client = Sumup()
result = client.readers.get_status("merchant_code", "reader_id")
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->getStatus('merchant_code', 'reader_id');
client := sumup.NewClient()
result, err := client.Readers.GetStatus(context.Background(), "merchant_code", "reader_id")
use sumup::Client;
let client = Client::default();
let result = client.readers().get_status("merchant_code", "reader_id").await;
Get a Reader Status response
{
"data": {
"battery_level": 10,
"battery_temperature": 35,
"connection_type": "Wi-Fi",
"firmware_version": "3.3.3.21",
"last_activity": "2025-09-25T15:20:00Z",
"state": "IDLE",
"status": "ONLINE"
}
}
Readers

Create a Reader Checkout

Creates a Checkout for a Reader.

This process is asynchronous and the actual transaction may take some time to be stared on the device.

There are some caveats when using this endpoint:

  • The target device must be online, otherwise checkout won't be accepted
  • After the checkout is accepted, the system has 60 seconds to start the payment on the target device. During this time, any other checkout for the same device will be rejected.

Note: If the target device is a Solo, it must be in version 3.3.24.3 or higher.

Required scopes: readers.write
Required permissions: readers_checkout_create

Path Parameters

  • merchant_code string required

    Merchant Code

  • reader_id string required

    The unique identifier of the Reader

CreateReaderCheckoutRequest

  • affiliate object nullable

    Affiliate metadata for the transaction. It is a field that allow for integrators to track the source of the transaction.

     Show attributes
     Close
    Affiliate
    • app_id string required

      Application ID of the affiliate. It is a unique identifier for the application and should be set by the integrator in the Affiliate Keys page.

      Example: "com.example.app"
    • foreign_transaction_id string required

      Foreign transaction ID of the affiliate. It is a unique identifier for the transaction. It can be used later to fetch the transaction details via the Transactions API.

      Example: "19e12390-72cf-4f9f-80b5-b0c8a67fa43f"
    • key string required

      Key of the affiliate. It is a unique identifier for the key and should be generated by the integrator in the Affiliate Keys page.

      Example: "123e4567-e89b-12d3-a456-426614174000"
    • tags object

      Additional metadata for the transaction. It is key-value object that can be associated with the transaction.

      Example: {"custom_key_1":"custom_value_1","custom_key_2":"custom_value_2"}
  • card_type string
    Options:  credit debit

    The card type of the card used for the transaction. Is is required only for some countries (e.g: Brazil).

    Example: "credit"
  • description string

    Description of the checkout to be shown in the Merchant Sales

  • installments integer minimum: 1nullable

    Number of installments for the transaction. It may vary according to the merchant country. For example, in Brazil, the maximum number of installments is 12.

    Omit if the merchant country does support installments. Otherwise, the checkout will be rejected.

    Example: 1
  • return_url string uri

    Webhook URL to which the payment result will be sent. It must be a HTTPS url.

    Example: "https://www.example.com"
  • tip_rates []number

    List of tipping rates to be displayed to the cardholder. The rates are in percentage and should be between 0.01 and 0.99. The list should be sorted in ascending order.

  • tip_timeout integer minimum: 30maximum: 120default: 30

    Time in seconds the cardholder has to select a tip rate. If not provided, the default value is 30 seconds.

    It can only be set if tip_rates is provided.

    Note: If the target device is a Solo, it must be in version 3.3.38.0 or higher.

    Example: 30
  • total_amount object required

    Amount structure.

    The amount is represented as an integer value altogether with the currency and the minor unit.

    For example, EUR 1.00 is represented as value 100 with minor unit of 2.

     Show attributes
     Close
    Money
    • currency string required

      Currency ISO 4217 code

      Example: "EUR"
    • minor_unit integer minimum: 0 required

      The minor units of the currency. It represents the number of decimals of the currency. For the currencies CLP, COP and HUF, the minor unit is 0.

      Example: 2
    • value integer minimum: 0 required

      Integer value of the amount.

      Example: 1000
    Example: {"currency":"EUR","minor_unit":2,"value":1000}

CreateReaderCheckoutError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderCheckoutError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderCheckoutUnprocessableEntity

  • errors object required

CreateReaderCheckoutError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderCheckoutError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderCheckoutError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

POST /v0.1/merchants/{merchant_code}/readers/{reader_id}/checkout
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{reader_id}/checkout \
-X POST \
-H "Authorization: Bearer $SUMUP_API_KEY" \
--json '{
"total_amount": {
"currency": "EUR",
"minor_unit": 2,
"value": 5033
}
}'
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.createCheckout("merchant_code", "reader_id", {
total_amount: {
currency: "EUR",
minor_unit: 2,
value: 5033,
},
});
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.CreateCheckoutAsync(
"merchant_code",
"reader_id",
new CreateReaderCheckoutRequest
{
TotalAmount = new Money
{
Currency = "EUR",
MinorUnit = 2,
Value = 5033,
},
}
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().createReaderCheckout(
"merchant_code",
"reader_id",
CreateReaderCheckoutRequest.builder()
.totalAmount(Money.builder()
.currency("EUR")
.minorUnit(2)
.value(5033)
.build())
.build()
);
from sumup import Sumup
client = Sumup()
result = client.readers.create_checkout("merchant_code", "reader_id", CreateReaderCheckoutBody(
total_amount=Money(
currency="EUR",
minor_unit=2,
value=5033,
),
))
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->createCheckout('merchant_code', 'reader_id', [
'total_amount' => [
'currency' => 'EUR',
'minor_unit' => 2,
'value' => 5033,
],
]);
client := sumup.NewClient()
result, err := client.Readers.CreateCheckout(context.Background(), "merchant_code", "reader_id", sumup.ReadersCreateCheckoutParams{
TotalAmount: sumup.Money{
Currency: "EUR",
MinorUnit: 2,
Value: 5033,
},
})
use sumup::Client;
let client = Client::default();
let result = client.readers().create_checkout("merchant_code", "reader_id", sumup::CreateReaderCheckoutBody{
total_amount: sumup::Money {
currency: "EUR".to_string(),
minor_unit: 2,
value: 5033,
},
}).await;
Create a Reader Checkout response
{
"data": {
"client_transaction_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}
Readers

Terminate a Reader Checkout

Terminate a Reader Checkout stops the current transaction on the target device.

This process is asynchronous and the actual termination may take some time to be performed on the device.

There are some caveats when using this endpoint:

  • The target device must be online, otherwise terminate won't be accepted
  • The action will succeed only if the device is waiting for cardholder action: e.g: waiting for card, waiting for PIN, etc.
  • There is no confirmation of the termination.

If a transaction is successfully terminated and return_url was provided on Checkout, the transaction status will be sent as failed to the provided URL.

Note: If the target device is a Solo, it must be in version 3.3.28.0 or higher.

Required scopes: readers.write
Required permissions: readers_checkout_create

Path Parameters

  • merchant_code string required

    Merchant Code

  • reader_id string required

    The unique identifier of the Reader

CreateReaderTerminateError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderTerminateError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderTerminateUnprocessableEntity

  • errors object required

CreateReaderTerminateError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderTerminateError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

CreateReaderTerminateError

  • errors object required
     Show attributes
     Close
    Attributes
    • detail string

      Error message

    • type string required

      Error code

POST /v0.1/merchants/{merchant_code}/readers/{reader_id}/terminate
curl https://api.sumup.com/v0.1/merchants/{merchant_code}/readers/{reader_id}/terminate \
-X POST \
-H "Authorization: Bearer $SUMUP_API_KEY"
import SumUp from '@sumup/sdk';
const client = new SumUp();
const result = await client.readers.terminateCheckout("merchant_code", "reader_id");
using SumUp;
var client = new SumUpClient();
var result = await client.Readers.TerminateCheckoutAsync(
"merchant_code",
"reader_id"
);
import com.sumup.sdk.SumUpClient;
SumUpClient client = SumUpClient.builder().build();
var result = client.readers().createReaderTerminate(
"merchant_code",
"reader_id"
);
from sumup import Sumup
client = Sumup()
result = client.readers.terminate_checkout("merchant_code", "reader_id")
$sumup = new \SumUp\SumUp();
$result = $sumup->readers->terminateCheckout('merchant_code', 'reader_id');
client := sumup.NewClient()
result, err := client.Readers.TerminateCheckout(context.Background(), "merchant_code", "reader_id")
use sumup::Client;
let client = Client::default();
let result = client.readers().terminate_checkout("merchant_code", "reader_id").await;