In-Person
Braintree SandboxContact SalesGet Help
  • Braintree In-Person
  • About
    • Solution Architecture
    • Technical Overview
    • Solution Coverage
  • Hardware
    • Verifone P400
    • Verifone M400
    • Verifone E285
    • Verifone V400m
  • Get Started
    • Integration Checklist
    • Request Dev Kit
    • Configure Sandbox
    • Account Structure
  • Integration Guides
    • API Authentication
    • Setup Reader
    • Initiate a Sale or Refund
      • Initiate a Card Present Authorization
      • Level 2 and Level 3 Data Processing
      • Passing Lodging Data
    • Vaulting and Customers
    • PayPal and Venmo QRC
    • Display Information
    • Custom Prompts
    • Card Data Collection
    • GraphQL Error Handling
    • Offline Transactions
    • Additional API Calls
    • Receipt Printing API
    • Reporting and Reconciliation
    • Testing Your Integration
    • Ready for Launch?
  • Partner Considerations
    • Overview
  • Support
    • Reader Management System (RMS) - Available in Beta Only
    • Managing Firmware Updates
    • Troubleshooting
    • Network Connection Test
    • Support/Contact Us
  • Reference
    • Firmware Version Release Notes
    • Verifone Device Reference
    • EMV Receipt Reference
    • General Payments Terminology
    • GraphQL Docs
    • PayPal Braintree Sub-processors
    • FAQ
Powered by GitBook
On this page
  • Ping Reader
  • Offline Ping
  • Query a list of Locations
  • Query a list of Readers
  • Query a list of Transactions

Was this helpful?

  1. Integration Guides

Additional API Calls

This section highlights some of the additional API calls that can be made with GraphQL to perform things like reader health/status checks, or querying a list of readers or transaction history, etc...

PreviousOffline TransactionsNextReceipt Printing API

Last updated 10 months ago

Was this helpful?

Ping Reader

It is possible to ping a specific reader in order to extract certain information from it, such as whether the reader is offline or online, or what firmware version is running on the reader. To perform this function you would need to ping the reader using the API call shown below:

More information on how to structure your reader ping query . It is important to note that the data returned in the response is not accurate in real-time, it is accurate within several minutes. For building request routing logic, we suggest utilizing the reader status returned in the .

query PingInStoreReader($readerId: ID!) {
    pingInStoreReader(readerId: $readerId) {
        id
        name
        status
        pairedAt
        lastSeenAt
        offlineSince
        softwareVersion
        location {
            id
            name
            internalName
            address {
                streetAddress
                extendedAddress
                locality
                region
                postalCode
                countryCode
            }
        }
    }
}
{
		"readerId": "your reader ID here"
}
{
    "data": {
        "pingInStoreReader": {
            "id": "aW5zdG9yZXJlYWMmh3OWo1OWhjbiNWRVJJRk9ORS04LTQ1NA",
            "name": "Your P400",
            "status": "ONLINE",
            "pairedAt": "2021-12-07T22:22:01.176605Z",
            "lastSeenAt": "2022-06-17T14:26:54.601256Z",
            "offlineSince": null,
            "softwareVersion": "3.2.1",
            "location": {
                "id": "aW5zdG9yZWxvY2F0aYyZGYwY2M5MDQ0ZThmY2MyNDNjNTJkMw",
                "name": "Your Retail Shop",
                "internalName": "0099",
                "address": {
                    "streetAddress": "18 West Side Avenue",
                    "extendedAddress": "Unit b",
                    "locality": "Beverly Hills",
                    "region": "California",
                    "postalCode": "90210",
                    "countryCode": "USA"
                }
            }
        }
    },
    "extensions": {
        "requestId": "03ed2c-ff2c-4dec-b4a1-6423b1"
    }

Offline Ping

This API mutation can be used if you would like to validate that you can ping a reader while offline without actually sending a charge request. The result is a simple response that will indicate you can ping the reader using the offline endpoint, example below:

https://readerIPaddress:3030/graphql

{ping}
{
		"readerId": "Your reader ID"
}
{
    "data": {
        "ping": "pong"
    }
}

Query a list of Locations

You may want to query a list of locations to retrieve things like locationId or location address info or other info linked to a location. See below example of how you may do this:

query Locations {
    inStoreLocations(first: 100) {
        pageInfo {
            hasNextPage
            hasPreviousPage
            startCursor
            endCursor
        }
        edges {
            node {
                id
                name
                internalName
                geoCoordinates {
                    latitude
                    longitude
                }
                qrCodePaymentsEnabled
                payerId
                address {
                    streetAddress
                    locality
                    region
                    countryCode
                    postalCode
                }
            }
            cursor
        }
    }
}
{
  "input": {
  }
}
{
    "data": {
        "inStoreLocations": {
            "pageInfo": {
                "hasNextPage": false,
                "hasPreviousPage": false,
                "startCursor": "MTYzMTU2NDU0MMhmYjAyZDI5Y2MyNDNjNTJkMw",
                "endCursor": "MTY2MTgZC03MzAyLTtOThmZi1mNGVkNzFjZTIxMWY"
            },
            "edges": [
                {
                    "node": {
                        "id": "aW5zdG9yZWxvY2F0hmYjAyZDI5Y2MyNDNjNTJkMw",
                        "name": "Retail Shop #1",
                        "internalName": "1001",
                        "geoCoordinates": {
                            "latitude": 34.0736,
                            "longitude": 118.4004
                        },
                        "qrCodePaymentsEnabled": null,
                        "payerId": null,
                        "address": {
                            "streetAddress": "18 West Side Avenue",
                            "locality": "Beverly Hills",
                            "region": "California",
                            "countryCode": "USA",
                            "postalCode": "90210"
                        }
                    },
                    "cursor": "MTYzMTU2NDU0ZGYwY2M5MDQ0ZThmYjAyZDI5Y2MyNDNjNTJkMw"
                },
                {
                    "node": {
                        "id": "aW5zdG9yZWxvYWFmZDczZTgxMjU0ZGFlYWQ1NmQ5ZWUyMGRkZDlhNA",
                        "name": "Retail Shop #2",
                        "internalName": "1002",
                        "geoCoordinates": {
                            "latitude": 34.0736,
                            "longitude": 118.4004
                        },
                        "qrCodePaymentsEnabled": null,
                        "payerId": null,
                        "address": {
                            "streetAddress": "18 West Side Avenue",
                            "locality": "Oceanside",
                            "region": "California",
                            "countryCode": "USA",
                            "postalCode": "90210"
                        }
                    } "cursor": "MTY2MTgwTQzZTUtOThmZi1mNGVkNzFjZTIxMWY"
                }
            ]
        }
    },
    "extensions": {
        "requestId": "2826dfce-dde7-4f95-a14e-a8609117011b"
    }
}





Query a list of Readers

It is possible to query a list of readers that are associated with a specific location or specific merchant account. To do this you can use a query as shown below in the example:

query ($input: InStoreReaderSearchInput!) {
    search {
        inStoreReaders(input: $input) {
            pageInfo {
                hasNextPage
                hasPreviousPage
                startCursor
                endCursor
            }
            edges {
                cursor
                node {
                    ... on InStoreReader {
                        id
                        status
                        name
                        softwareVersion
                        location {
                            id
                        }
                        vendor {
                            ... on VerifoneVendor {
                                model
                                osVersion
                            }
                        }
                    }
                }
                
            }
        }
    }
}
{
  "input": {
  }
}
{
    "data": {
        "search": {
            "inStoreReaders": {
                "pageInfo": {
                    "hasNextPage": false,
                    "hasPreviousPage": false,
                    "startCursor": "QnJhaW50cmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTQwMS05MTAtNDA3",
                    "endCursor": "QnJhaW50cmVlLmNwdTloY24uUmVhZGVyLlZFUklGT05FLTgwNS0wMTctNDU0"
                },
                "edges": [
                    {
                        "cursor": "QnJhaW50wd3NmNDJodzlqNThZGVyLlZklGT05FLTQwMS05MTAtNDA3",
                        "node": {
                            "id": "aW5zdG9yRlcl8jY3B3c2Y0MOWhjbik9ORS00MDEtOTEwLTQwNw",
                            "status": "OFFLINE",
                            "name": "Your E285",
                            "softwareVersion": "3.2.1",
                            "location": {
                                "id": "aW5zdG9y2F0aW9uXyNjZjYM5MmYjAyZDI5Y2MyNDNjNTJkMw"
                            },
                            "vendor": {
                                "model": null,
                                "osVersion": "ADK 4.6.4"
                            }
                        }
                    },
                    {
                        "cursor": "lLmNwd3NmNDJodzlqNTloY24uUmVhZlZFUklGT05FLTgwNS0wMTctNDU0",
                        "node": {
                            "id": "aW5zdG9yZXJljY3B3c2Y0MmjbiNk9ORS04MDUtMDE3LTQ1NA",
                            "status": "ONLINE",
                            "name": "Your P400",
                            "softwareVersion": "3.2.1",
                            "location": {
                                "id": "aW5zdG9yZWxvYjZjYyZ05Y2MyNDNjNTJkMw"
                            },
                            "vendor": {
                                "model": null,
                                "osVersion": "ADK 4.6.4"
                            }
                        }
                    }
                ]
            }
        }
    },
    "extensions": {
        "requestId": "7413b-463c-4bdc-9f0f-d142fa"
    }

If you want to query a list of readers that are paired to a specific locationId you may also pass in filters as variables in your request using the below example which uses the "is" filter based on the locationId:

query ($input: InStoreReaderSearchInput!) {
    search {
        inStoreReaders(input: $input) {
            pageInfo {
                hasNextPage
                hasPreviousPage
                startCursor
                endCursor
            }
            edges {
                cursor
                node {
                    ... on InStoreReader {
                        id
                        status
                        name
                        softwareVersion
                        location {
                            id
                        }
                        vendor {
                            ... on VerifoneVendor {
                                model
                                osVersion
                            }
                        }
                    }
                }
                
            }
        }
    }
}
{
  "input": {
      "locationId":{
          "is": "Insert your location ID"
      }
  }
}
{
    "data": {
        "search": {
            "inStoreReaders": {
                "pageInfo": {
                    "hasNextPage": false,
                    "hasPreviousPage": false,
                    "startCursor": "QnJhaW50cmVlLmNwd3NmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTQwMS05MTAtNDA3",
                    "endCursor": "QnJhaW50cmVlLmNwd3NmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTgwNS0wMTctNDU0"
                },
                "edges": [
                    {
                        "cursor": "QnJhaW50cmVlLmNwd3NmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTQwMS05MTAtNDA3",
                        "node": {
                            "id": "aW5zdG9yZXJlYWRlcl8jY3B3c2Y0Mmh3OWo1OWhjbiNWRVJJRk9ORS00MDEtOTEwLTQwNw",
                            "status": "OFFLINE",
                            "name": "Eitan's E285",
                            "softwareVersion": "5.0.0",
                            "location": {
                                "id": "aW5zdG9yZWxvY2F0aW9uXjYyZGYwY2M5MDQ0ZThmYjAyZDI5Y2MyNDNjNTJkMw",
                                "name": "Eitan's Retail Shop",
                                "internalName": "0099"
                            },
                            "vendor": {
                                "model": "E285",
                                "osVersion": "ADK 4.7.20"
                            }
                        }
                    },
                    {
                        "cursor": "QnJhaW50cmVlLmNwd3NmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTQwMS05MjMtNjA2",
                        "node": {
                            "id": "aW5zdG9yZXJlYWRlcl8jY3B3c2Y0Mmh3OWo1OWhjbiNWRVJJRk9ORS00MDEtOTIzLTYwNg",
                            "status": "OFFLINE",
                            "name": "Eitan's Merch Prod E285",
                            "softwareVersion": "5.4.0",
                            "location": {
                                "id": "aW5zdG9yZWxvW9uXyNjZjYyZGYwY2M5MDQ0ZThmYjAyZDI5Y2MyNDNjNTJkMw",
                                "name": "Eitan's Retail Shop",
                                "internalName": "0099"
                            },
                            "vendor": {
                                "model": "E285",
                                "osVersion": "ADK 4.7.20"
                            }
                        }
                    },
                    {
                        "cursor": "QnJhaW50cmVlLmNwd3NmNDJodzlqNTloY24uUmVhZGVyLlZFUklGT05FLTgwNS0wMTctNDU0",
                        "node": {
                            "id": "aW5zdG9yZXJlYWRlcl8jY2Y0Mmh3OWo1OWhjbiNWRVJJRk9ORS04MDUtMDE3LTQ1NA",
                            "status": "OFFLINE",
                            "name": "Eitan's Test P400",
                            "softwareVersion": "5.2.2",
                            "location": {
                                "id": "aW5zdG9yZWxvY2F0aWyNjZjYyZGYwY2M5MDQ0ZThmYjAyZDI5Y2MyNDNjNTJkMw",
                                "name": "Eitan's Retail Shop",
                                "internalName": "0099"
                            },
                            "vendor": {
                                "model": "P400",
                                "osVersion": "ADK 4.7.20"
                            }
                        }
                    }
                ]
            }
        }
    },
    "extensions": {
        "requestId": "ffb534fd-4b08-4dbd-880d-4933da42a6"
    }
}

Query a list of Transactions

If you would like to automate/streamline your reconciliation process, one way of doing so is by utilizing a transaction query. There are a few ways of querying transactions, try modifying the variables in your request to alter the results of your search:

{
  "query": "query Search($input: TransactionSearchInput!) {
    search {
      transactions(input: $input) {
        pageInfo {
          hasNextPage
          startCursor
          endCursor
        },
        edges {
          node {
            id
            status
            amount {
              value
              currencyIsoCode
            }
          }
        }
      }
    }
  }",
  "variables": {
    "input": {
       "amount": {
         "value": {
           "greaterThanOrEqualTo": "800.00"
         }
       },
       "status": {
         "in": ["SETTLED", "VOIDED"]
       }
     }
   }
}'
{
    "data": {
        "search": {
            "transactions": {
                "pageInfo": {
                    "hasNextPage": false,
                    "startCursor": "ZEhKaGJuTJwYjI1Zk1HaD6WVhnOzIwMjItMDUtMTdUMTU6MjQ6NTJa",
                    "endCursor": "ZEhKaGJuTmYjI1Zk5HWjNjJvOzIwMjEtMDktMTBUMTY6NDU6NDVa"
                },
                "edges": [
                    {
                        "node": {
                            "id": "dHJhbnNhfMGhzYXg",
                            "status": "SETTLED",
                            "amount": {
                                "value": "9000.00",
                                "currencyIsoCode": "USD"
                            }
                        }
                    },
                    {
                        "node": {
                            "id": "dHNhY3Rpb2cHM2MjI",
                            "status": "VOIDED",
                            "amount": {
                                "value": "9000.00",
                                "currencyIsoCode": "USD"
                            }
                        }
                    },
                    {
                        "node": {
                            "id": "dHJh3Rpb25fmVjbnQ",
                            "status": "SETTLED",
                            "amount": {
                                "value": "9000.00",
                                "currencyIsoCode": "USD"
                            }
                        }
                    },
                    {
                        "node": {
                            "id": "dHJhY3Rpb2MGF2djQ",
                            "status": "SETTLED",
                            "amount": {
                                "value": "872.00",
                                "currencyIsoCode": "USD"
                            }
                        }
                    },
                    {
                        "node": {
                            "id": "dHJhbRpb25fNkzZHM",
                            "status": "SETTLED",
                            "amount": {
                                "value": "989.85",
                                "currencyIsoCode": "USD"
                            }
                        }
                    },
                    {
                        "node": {
                            "id": "dHJhbnNpb25fpyZ2o",
                            "status": "SETTLED",
                            "amount": {
                                "value": "855.86",
                                "currencyIsoCode": "USD"
                            }
                        }
                    }
                ]
            }
        }
    },
    "extensions": {
        "requestId": "5e390-8d1c-4004-97ca-611a798"
    }

For more information on how to use the query function to search for transactions or other objects see our documentation with more specific details on

here
constructing transaction searches
here
offline transaction
request charge mutation