POST/cards/{cardId}/transactions

Create Card Transaction

Creates a purchase or ATM transfer for testing.

Non-production only. Not available in production (403: This endpoint is not available in production environment).

bash
curl -X POST "{{API_BASE_URL}}/cards/{{cardId}}/transactions" \
  -H "session-token: {{sessionToken}}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d "{\"Amount\": 29, \"TransactionType\": \"cardPurchase\"}"
bash
curl -X POST "{{API_BASE_URL}}/cards/{{cardId}}/transactions" \
  -H "session-token: {{sessionToken}}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d "{\"Amount\": 50, \"TransactionType\": \"cardATM\"}"

Path variables

FieldTypeRequiredPossible valuesDescription
cardIdstringRequired55d0c52f-79ee-4d38-acf4-a16c07957898

Card reference ID from list cards.

Headers

FieldTypeRequiredPossible valuesDescription
session-tokenstringRequired—

SessionToken obtained from the Create GMA Session endpoint. All secured endpoints require this header.

Request body

FieldTypeRequiredPossible valuesDescription
AmountnumberRequired—

Number greater than 0.

TransactionTypestringRequiredcardPurchase | cardATM

Accepted values: `cardPurchase`, `cardATM`.

DescriptionstringOptional—

Merchant text. Defaults: Amazon (purchase) / Bank of America ATM (ATM).

RetrievalReferenceNumberstringOptional—

Optional; generated if omitted.

AuthorizationNumberstringOptional—

Optional; generated if omitted.

VisaTransactionIdstringOptional—

Optional.

TransactionTracestringOptional—

Optional.

CardMerchantCategoryCodestringOptional—

Optional MCC.

Example request

{
  "Amount": 29,
  "TransactionType": "cardPurchase"
}

Accepted `TransactionType` values: `cardPurchase`, `cardATM`.

Additional info

FieldTypeRequiredPossible valuesDescription
200 — Still processingobjectOptional—

The create call did not finish within about 45 seconds. `TransactionNumber` is `null`. After a short wait, `GET /cards/{cardId}/transactions` includes `TransactionNumber`.

401objectOptional—

Missing broker session. `ResponseMessage` is `Unauthorized`. `ResponseErrors`: `Broker session is missing. Please authenticate again.`

403objectOptional—

Production, or the card is not owned by this broker. `ResponseMessage` is `Forbidden`. Production `ResponseErrors`: `This endpoint is not available in production environment`. For a card this broker does not own, the `ResponseErrors` entry is `Broker does not have access to this card`.

404objectOptional—

Card, customer, or USD account not found. `ResponseMessage` is `NotFound`. Other `ResponseErrors` entries: `Customer not found for this card`, `USD account not found for this customer`.

400objectOptional—

Inactive card, financial transactions off, spend suspended (`cardPurchase` only), ATM off (`cardATM` only), bad amount or type, or insufficient balance. Also returned for the limit cases below. `ResponseMessage` is `BadRequest`. The specific sentence is in `ResponseErrors`.

Example— 200 — Still processing

{
  "ResponseCode": 200,
  "ResponseMessage": "Success",
  "ResponseData": {
    "CardId": "37726da6-643d-4c62-b91d-72b3d2e801f4",
    "TransactionNumber": null,
    "TransactionType": "CardAtmTransfer",
    "Amount": 17,
    "RetrievalReferenceNumber": "A19399233208",
    "AuthorizationNumber": "233208",
    "VisaTransactionId": "VATM179031939923",
    "AuthorizationStatus": "PROCESSING",
    "Message": "Transaction submitted and still processing. Use reference A19399233208 to track it."
  }
}

Example— 401

{
  "ResponseCode": 401,
  "ResponseMessage": "Unauthorized",
  "ResponseData": null,
  "ResponseErrors": [
    "Broker session is missing. Please authenticate again."
  ]
}

Example— 403

{
  "ResponseCode": 403,
  "ResponseMessage": "Forbidden",
  "ResponseData": null,
  "ResponseErrors": [
    "This endpoint is not available in production environment"
  ]
}

Example— 404

{
  "ResponseCode": 404,
  "ResponseMessage": "NotFound",
  "ResponseData": null,
  "ResponseErrors": [
    "Card not found"
  ]
}

Example— 400

{
  "ResponseCode": 400,
  "ResponseMessage": "BadRequest",
  "ResponseData": null,
  "ResponseErrors": [
    "Amount exceeds the remaining daily limit of 25.00"
  ]
}

Limit and velocity. Checked before the transfer is posted. A limit or count of 0 means unlimited and is not enforced. If a cap greater than 0 is set and its remaining amount or count is missing or not a number, the API returns 400 and does not treat that remaining value as 0. The first failed check is returned.

ResponseMessage stays the status label. The specific sentence is in ResponseErrors.

ResponseErrorsWhen
Card transactions can only be created for Active cardsCard is not Active
Financial transactions are disabled for this customerCustomer financial transactions are off
Card purchases are not allowed because transactions are suspended for this cardcardPurchase only
ATM transactions are not allowed because ATM usage is disabled for this cardcardATM only
Amount exceeds the per-transaction limit of 2500.00Purchase and ATM. Amounts in these messages are examples; the API uses the card's value with 2 decimal places.
Amount exceeds the remaining daily limit of 25.00Same for weekly, monthly, and yearly
Daily transaction count limit has been reachedCount is set and remaining count is 0. Same for weekly, monthly, and yearly
Amount exceeds the per-ATM withdrawal limit of 500.00cardATM only
Amount exceeds the remaining daily ATM withdrawal limit of 100.00cardATM only. Same for weekly and monthly. No yearly ATM limit
Daily ATM withdrawal count limit has been reachedcardATM only. Same for weekly and monthly
Unable to load card limitsLimit data could not be loaded
Unable to verify the per-transaction limitPer-transaction cap is not a valid number
Unable to verify the remaining daily limitDaily cap is set, but the remaining amount is missing or not a number. Same pattern for weekly, monthly, and yearly: Unable to verify the remaining weekly limit, Unable to verify the remaining monthly limit, Unable to verify the remaining yearly limit
Unable to verify the remaining daily transaction countDaily count is set, but the remaining count is missing or not a number. Same pattern for weekly, monthly, and yearly
Unable to verify the per-ATM withdrawal limitcardATM only
Unable to verify the remaining daily ATM withdrawal limitcardATM only. Same pattern for weekly and monthly
Unable to verify the remaining daily ATM withdrawal countcardATM only. Same pattern for weekly and monthly

GET /cards/{cardId}/limits still returns only daily, monthly, and per-transaction amounts. Create can still return 400 for weekly, yearly, or count limits.

Non-production only. Path param stays camelCase (cardId). Body fields are PascalCase. Create response AuthorizationStatus is the raw status (PROCESSING, AUTHORIZED, …) — not PascalCase. GET card-transaction list Status is PascalCase.

Response

FieldTypePossible valuesDescription
ResponseCodeinteger200 | 201 | 204 | 301 | 400 | 401 | 403 | 404 | 410 | 422 | 500 | 503

API result code in the response envelope. Indicates success or the error category (e.g. 200 success, 400 bad request, 401 unauthorized).

ResponseMessagestringSuccess | Created | NoContent | BadRequest | Unauthorized | Forbidden | NotFound | Gone | UnprocessableContent | ServerError | ResourceMoved | ServiceUnAvailable | UnProcessableEntity

Human-readable label paired with ResponseCode (e.g. Success, BadRequest, Unauthorized). Use with ResponseCode to interpret the outcome.

ResponseDataobjectPlease refer to below example for response body

Created transfer result. `AuthorizationStatus` is the raw status value (not PascalCase). If it is `PROCESSING`, `TransactionNumber` is `null`.

ResponseData.CardIdstring—

Card reference.

ResponseData.TransactionNumberstring | null—

Transaction number (e.g. `FV000750791`). `null` when the transfer has not finished within the create wait window (~45s).

ResponseData.TransactionTypestringCardPurchaseTransfer | CardAtmTransfer

`CardPurchaseTransfer` or `CardAtmTransfer`.

ResponseData.Amountnumber—

Amount posted.

ResponseData.RetrievalReferenceNumberstring—

Reference to track the transfer.

ResponseData.AuthorizationNumberstring—

Auth number.

ResponseData.VisaTransactionIdstring | null—

Visa id (if sent/generated).

ResponseData.AuthorizationStatusstringAUTHORIZED | PENDING_AUTHORIZATION | AUTHORIZATION_DENIED | AUTHORIZATION_EXPIRED | AUTHORIZATION_CANCELED | NA | PROCESSING

Raw authorization status (not PascalCase). `PROCESSING` means the create call timed out waiting for the transfer — the request was submitted.

ResponseData.Messagestring—

Present when still processing (for example `Transaction submitted and still processing. Use reference <RRN> to track it.`).

Example response

{
  "ResponseCode": 200,
  "ResponseMessage": "Success",
  "ResponseData": {
    "CardId": "c438a4da-2a5c-457c-af13-42f9d148c208",
    "TransactionNumber": "FV000750791",
    "TransactionType": "CardPurchaseTransfer",
    "Amount": 3,
    "RetrievalReferenceNumber": "P34197611320",
    "AuthorizationNumber": "611320",
    "VisaTransactionId": "VPURCH1790341976",
    "AuthorizationStatus": "AUTHORIZED"
  }
}

If the create response is still in a processing state (`AuthorizationStatus` is `PROCESSING` and `TransactionNumber` is `null`), after a short wait `GET /cards/{cardId}/transactions` returns `TransactionNumber` on each row.

Requires `session-token: {SessionToken}` from Create GMA Session. Use the same client IP as authentication.

Search guide books, endpoints, paths, or parameters

↑↓navigate↵openEscclose