Dojo Transaction API
Retrieves transaction records for a merchant. Documented REST endpoint under https://api.dojo.tech for querying processed card transactions. Version 2023-11-12.
Retrieves transaction records for a merchant. Documented REST endpoint under https://api.dojo.tech for querying processed card transactions. Version 2023-11-12.
{
"openapi": "3.0.0",
"info": {
"title": "Transaction API",
"version": "2023-11-12",
"description": "# Introduction\nThe Dojo Transaction API is RESTful. It returns HTTP response codes to indicate errors. It also\naccepts and returns JSON in the HTTP body.\n\n## Base URLs\nUse the following base URL when making requests to the API: https://api.dojo.tech/\n\n## Authentication\nThe Transaction API uses [Basic HTTP auth](https://en.wikipedia.org/wiki/Basic_access_authentication). You can generate API keys in [Developer Portal](https://developer.dojo.tech).\nSecret keys for the test environment have the prefix `sk_sandbox_` and for production have the prefix `sk_prod_`.\nYou must include your secret API key in the header of all requests, for example:\n\n```curl\ncurl\n --header 'content-type: application/json' \\\n --header 'Authorization: Basic sk_prod_your_key' \\\n...\n```\n\nAPI requests without authentication will fail.\n\n## HTTP Responses\n\nThe API returns standard HTTP response codes [RFC 7231](https://tools.ietf.org/html/rfc7231#section-6) on each request to indicate the success or otherwise of API requests. HTTP status codes summary are listed below:\n* `200 OK`—The request was successful.\n* `201 Created`—The request was successful, and a new resource was created as a result.\n* `204 No Content`—The request was successful, but there is no content to send.\n* `400 Bad Request`—Bad request, probably due to a syntax error.\n* `401 Unauthorized`—Authentication required.\n* `403 Forbidden`—The API key doesn't have permissions.\n* `404 Not Found`—The resource doesn't exist.\n* `405 Method Not Allowed`—The request method is known by the server but isn't supported by the target resource.\n* `409 Conflict`—The request couldn't be completed because it conflicted with another request or the server's configuration.\n* `500`, `502`, `503`, `504` `Server Errors`—An error occurred with our API.\n\n## Errors\n\nDojo follows the error response format proposed in [RFC 7807](https://tools.ietf.org/html/rfc7807) also known as Problem Details for HTTP APIs. All errors are returned in the form of JSON.\n\n### Error Schema\n\nIn case of an error, the response object contains the following fields:\n* `errors` [object]—A human-readable explanation of errors.\n* `type` [string]—\nA URI reference RFC 3986 that identifies the problem type.\n* `title` [string]—A short, human-readable summary of the error.\n* `status` [integer]—The HTTP status code.\n* `detail` [string]—A human-readable message giving more details about the error. Not always present.\n* `traceId` [string]—The unique identifier of the failing request.\nThe following example shows a possible error response:\n\n```json\n{\n \"errors\": {\n \"Reference\": [\n \"The Reference field is required.\"\n ]\n },\n \"type\": \"https://tools.ietf.org/html/rfc7231#section-6.5.1\",\n \"title\": \"One or more validation errors occurred.\",\n \"status\": 400,\n \"traceId\": \"00-a405f077df056a498323ffbcec05923f-aa63e6f4dbbc734a-01\",\n}\n```\n\n## Versioning\n\nDojo APIs use the yyyy-mm-dd API version-naming scheme. You have to pass the version as the `version` header in all API calls, for example:\n\n``` curl\ncurl\n --header 'content-type: application/json' \\\n --header 'Authorization: Basic sk_prod_your_key' \\\n --header 'version: 2023-11-12' \\\n```",
"termsOfService": "https://dojo.tech/legal/",
"contact": {
"name": "Dojo Developer Experience Team"
}
},
"servers": [
{
"url": "https://api.dojo.tech"
}
],
"security": [
{
"ApiKeyAuth": []
}
],
"tags": [
{
"name": "Transactions",
"description": "Allows you to take and manage payments."
}
],
"paths": {
"/transactions/search": {
"post": {
"tags": [
"Transactions"
],
"operationId": "Transactions_Search",
"requestBody": {
"x-name": "request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchTransactionsRequest"
}
}
},
"required": true,
"x-position": 1
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedTransaction"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"parameters": [
{
"name": "version",
"in": "header",
"required": true,
"schema": {
"type": "string",
"format": "date"
},
"example": "2022-04-07",
"description": "The API version with format `yyyy-mm-dd`. The Current version is `2022-04-07`.\nToday's date will always give you the latest version. "
}
],
"summary": "List all transactions",
"description": "Retrieves a list of transactions.\nResults are paginated. By default, the method returns up to 50 transactions."
}
}
},
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"in": "header",
"type": "apiKey",
"name": "Authorization"
}
},
"schemas": {
"Money": {
"title": "Money",
"type": "object",
"example": {
"value": 1000,
"currencyCode": "GBP"
},
"properties": {
"value": {
"type": "integer",
"description": "The amount in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) minor units, for example \"100\" for 1.00 GBP.",
"format": "int64"
},
"currencyCode": {
"type": "string",
"description": "Three-letter currency code in [ISO 4217 alpha-3](https://www.iso.org/iso-4217-currency-codes.html) format. Accepts `GBP` and `EUR`.",
"minLength": 1,
"maxLength": 10
}
},
"required": [
"value",
"currencyCode"
]
},
"TransactionStatus": {
"type": "string",
"description": "Current status of the transaction.",
"title": "TransactionStatus",
"enum": [
"Authorized",
"Declined",
"Held",
"UnderReview",
"Reversed",
"AwaitingCollection",
"Released",
"Expired"
]
},
"TransactionType": {
"type": "string",
"description": "Types of transaction.",
"title": "TransactionType",
"enum": [
"Sale",
"Refund",
"PreAuth",
"Collection"
]
},
"Transaction": {
"type": "object",
"additionalProperties": false,
"description": "The Transaction object.",
"title": "Transaction",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the transaction.\n",
"nullable": false
},
"legacyId": {
"type": "string",
"description": "Unique identifier for the transaction (legacy form).\n",
"nullable": false
},
"dateTime": {
"type": "string",
"format": "date-time",
"description": "The timestamp of the transaction, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC format."
},
"paymentIntentId": {
"type": "string",
"description": "If the transaction was made using a payment intent, its ID will be included here.",
"nullable": true
},
"merchantId": {
"type": "string",
"description": "The merchant's unique identifier (MID).\n",
"nullable": true
},
"type": {
"$ref": "#/components/schemas/TransactionType",
"nullable": true
},
"status": {
"$ref": "#/components/schemas/TransactionStatus",
"nullable": true
},
"amount": {
"nullable": false,
"oneOf": [
{
"$ref": "#/components/schemas/Money"
}
],
"description": "The transaction's sale amount."
},
"cashbackAmount": {
"nullable": false,
"oneOf": [
{
"$ref": "#/components/schemas/Money"
}
],
"description": "The cashback amount of the transaction."
},
"tipsAmount": {
"nullable": false,
"oneOf": [
{
"$ref": "#/components/schemas/Money"
}
],
"description": "Expressed as a positive integer, this is the amount of tip (gratuity) attached to a transaction."
},
"reference": {
"type": "string",
"description": "The reference (or merchant provided order ID) of the transaction.",
"nullable": true
},
"paymentDetails": {
"nullable": false,
"oneOf": [
{
"$ref": "#/components/schemas/PaymentDetails"
}
],
"description": "The details of the payment associated with the transaction including payment product, card information, etc."
}
}
},
"Card": {
"title": "Card",
"type": "object",
"example": {
"number": "**********0027",
"fundingType": "Debit",
"type": "Mastercard"
},
"properties": {
"number": {
"type": "string",
"description": "The card number. Masked for security.",
"nullable": true
},
"fundingType": {
"type": "string",
"description": "Card funding type for example: `Credit`, `Debit`, etc...",
"nullable": true
},
"type": {
"type": "string",
"description": "Card scheme for example: `Visa`, `Mastercard`, etc.",
"nullable": true
}
}
},
"ProblemDetails": {
"type": "object",
"title": "ProblemDetails",
"description": "",
"properties": {
"type": {
"type": "string",
"nullable": true,
"description": "Card scheme for example: `Visa`, `Mastercard`, etc."
},
"title": {
"type": "string",
"nullable": true,
"description": "A short, human-readable summary of the error.\n"
},
"status": {
"type": "integer",
"format": "int32",
"nullable": true,
"description": "The [HTTP status code](#section/Introduction/HTTP-Responses)."
},
"detail": {
"type": "string",
"nullable": true,
"description": "A human-readable message giving more details about the error. This field is optional, so it's not always present. "
},
"traceId": {
"type": "string",
"nullable": true,
"description": "The unique identifier of the failing request. This should be used to track the source of the error.\n"
},
"errors": {
"type": "object",
"nullable": true,
"description": "A human-readable explanation of errors.",
"additionalProperties": {}
}
}
},
"Cursor": {
"type": "object",
"additionalProperties": false,
"description": "A cursor for use in pagination.",
"properties": {
"limit": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 100,
"example": 20,
"default": 50,
"description": "The maximum number of results that can be returned in a single page."
},
"before": {
"type": "string",
"description": "A cursor for use in pagination. Returns you to the previous page. `before` and `after`\nare mutually exclusive—only one of these may be used.",
"nullable": true
},
"after": {
"type": "string",
"description": "A cursor for use in pagination. Sends you to the next page. `before` and `after` are\nmutually exclusive—only one of these may be used.",
"nullable": true
}
}
},
"SearchTransactionsRequest": {
"type": "object",
"additionalProperties": false,
"description": "",
"required": [
"startDate",
"endDate"
],
"properties": {
"startDate": {
"type": "string",
"format": "date-time",
"description": "A date and time to display transaction results from, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC format. The span between the start and end dates cannot exceed 7 days.\n",
"nullable": true
},
"endDate": {
"type": "string",
"format": "date-time",
"description": "A date and time to display transaction results until, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC format. The span between the start and end dates cannot exceed 7 days.\n",
"nullable": true
},
"cursor": {
"nullable": true,
"oneOf": [
{
"$ref": "#/components/schemas/Cursor"
}
],
"description": "A cursor for use in pagination."
}
},
"example": {
"statuses": [
"Authorized"
],
"startDate": "2019-08-24T14:15:22Z",
"endDate": "2023-08-24T14:15:22Z",
"cursor": {
"limit": 20
}
}
},
"PagedResultOfTransaction": {
"type": "object",
"additionalProperties": false,
"properties": {
"data": {
"type": "array",
"nullable": true,
"description": "An array of transactions.\n",
"items": {
"$ref": "#/components/schemas/Transaction"
}
},
"before": {
"type": "string",
"description": "A cursor for use in pagination. Returns you to the previous page. `before` and `after`\nare mutually exclusive—only one of these may be used.",
"nullable": true
},
"after": {
"type": "string",
"description": "A cursor for use in pagination. Sends you to the next page. `before` and `after` are\nmutually exclusive—only one of these may be used.",
"nullable": true
}
}
},
"PagedTransaction": {
"allOf": [
{
"$ref": "#/components/schemas/PagedResultOfTransaction"
},
{
"type": "object",
"additionalProperties": false
}
]
},
"PaymentProduct": {
"type": "string",
"description": "The Dojo payment product associated with this transaction.",
"title": "PaymentProduct",
"enum": [
"TapToPayOnIPhone",
"DojoPocket",
"Terminal",
"OnlineCheckout",
"VirtualTerminal",
"PaymentLinks",
"DojoBookings",
"PayByQr",
"Other"
]
},
"TerminalEntryModeType": {
"type": "string",
"description": "Indicates the entry mode used on a payment made using a terminal.",
"title": "TerminalEntryModeType",
"enum": [
"Chip",
"ContactLess",
"Swipe",
"Keyed",
"Unknown"
]
},
"PaymentDetails": {
"title": "PaymentDetails",
"type": "object",
"properties": {
"card": {
"$ref": "#/components/schemas/Card"
},
"authCode": {
"type": "string",
"description": "Authorization code for the transaction.",
"nullable": true
},
"isRemote": {
"type": "boolean",
"description": "Indiciates if a transaction was made using remote or terminal gateway."
},
"paymentProduct": {
"$ref": "#/components/schemas/PaymentProduct",
"nullable": true
},
"terminalEntryModeType": {
"$ref": "#/components/schemas/TerminalEntryModeType",
"nullable": true
},
"terminalId": {
"type": "string",
"description": "The ID of the terminal used for payment.",
"nullable": true
}
}
}
}
},
"x-generator": "NSwag v13.12.1.0 (NJsonSchema v10.4.6.0 (Newtonsoft.Json v12.0.0.0))",
"x-tagGroup": [
{
"name": "Payments",
"tags": [
"transactions",
"Refunds",
"Captures"
]
}
]
}