Skip to content

Orders & Transactions

Orders and transactions are the payment records in your SMBcrm account. Use them to reconcile revenue, look up a customer’s purchases, and audit individual charges. You can also fulfill an order with tracking details and record a manual payment against it. Everything else on this page is read-only.

Base URL: https://services.smbcrm.com · Version header: v3 · Scopes: payments/orders.readonly (read orders and fulfillments), payments/orders.write (fulfill orders), payments/orders.collectPayment (record a payment), payments/transactions.readonly (read transactions). See Scopes.

GET/payments/orders

List orders in your account.

scope payments/orders.readonlyauth Location token or PIT

altId is required. Narrow the list with the filters below and page with limit and offset.

Terminal window
curl "https://services.smbcrm.com/payments/orders?altId=<location_id>&limit=20" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"data": [
{
"_id": "<order_id>",
"altId": "<location_id>",
"altType": "location",
"contactId": "<contact_id>",
"contactName": "Jordan Lee",
"contactEmail": "jordan@example.com",
"currency": "USD",
"amount": 149,
"subtotal": 149,
"discount": 0,
"status": "completed",
"liveMode": true,
"sourceType": "funnel",
"sourceName": "Checkout",
"sourceId": "<funnel_id>",
"fulfillmentStatus": "unfulfilled",
"createdAt": "2026-07-08T15:04:00.000Z",
"updatedAt": "2026-07-08T15:04:00.000Z"
}
],
"totalCount": 1
}

List items return the order’s source as flat sourceType, sourceName, and sourceId fields, with subtotal and discount beside amount. Get an order returns the same data nested as source and amountSummary. fulfillmentStatus shows where the order stands on fulfillment, for example unfulfilled.

Query param Type Required Description
altId string Yes Your <location_id>.
locationId string No The sub-account ID. Optional, since altId already identifies your account.
status string No Filter by order status, for example completed.
paymentStatus string No Filter by payment status: paid, unpaid, refunded, or partially_paid.
paymentMode string No Filter by payment mode, for example live.
startAt string No Start of the date range, as YYYY-MM-DD.
endAt string No End of the date range, as YYYY-MM-DD.
search string No Search by order name.
contactId string No Limit results to one contact’s orders.
funnelProductIds string No Comma-separated funnel product IDs.
sourceId string No Filter by the ID of the order’s source.
limit number No Maximum number of orders to return per page. Defaults to 10.
offset number No Number of orders to skip, for pagination. Defaults to 0.
GET/payments/orders/{orderId}

Get a single order by ID.

scope payments/orders.readonlyauth Location token or PIT

Pass the order’s _id as orderId. altId is required. An unknown orderId returns 400.

Terminal window
curl "https://services.smbcrm.com/payments/orders/<order_id>?altId=<location_id>" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"_id": "<order_id>",
"altId": "<location_id>",
"altType": "location",
"contactId": "<contact_id>",
"currency": "USD",
"amount": 149,
"status": "completed",
"liveMode": true,
"fulfillmentStatus": "unfulfilled",
"amountSummary": { "subtotal": 149, "discount": 0 },
"source": { "type": "funnel", "id": "<funnel_id>", "name": "Checkout" },
"createdAt": "2026-07-08T15:04:00.000Z",
"updatedAt": "2026-07-08T15:04:00.000Z"
}

The full response also includes items, coupon, contactSnapshot, and trackingId.

Query param Type Required Description
altId string Yes Your <location_id>.
locationId string No The sub-account ID. Optional, since altId already identifies your account.

A fulfillment records which items on an order shipped and the tracking details for the shipment. List an order’s fulfillments with payments/orders.readonly. Create one with payments/orders.write.

GET/payments/orders/{orderId}/fulfillments

List the fulfillments recorded for an order.

scope payments/orders.readonlyauth Location token or PIT

altId and altType are required. Each fulfillment lists its trackings, the fulfilled items with their product and price details, and its timestamps.

Terminal window
curl "https://services.smbcrm.com/payments/orders/<order_id>/fulfillments?altId=<location_id>&altType=location" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"status": true,
"data": [
{
"_id": "<fulfillment_id>",
"altId": "<location_id>",
"altType": "location",
"trackings": [
{
"trackingNumber": "40012345678",
"shippingCarrier": "FedEx",
"trackingUrl": "https://www.fedex.com/wtrk/track/?trknbr=40012345678"
}
],
"items": [
{
"_id": "<price_id>",
"name": "Starter Kit",
"product": {
"_id": "<product_id>",
"locationId": "<location_id>",
"name": "Starter Kit",
"productType": "PHYSICAL",
"createdAt": "2026-06-01T09:00:00.000Z",
"updatedAt": "2026-06-01T09:00:00.000Z"
},
"price": {
"_id": "<price_id>",
"name": "Default",
"type": "one_time",
"currency": "USD",
"amount": 149
},
"qty": 1
}
],
"createdAt": "2026-07-09T10:00:00.000Z",
"updatedAt": "2026-07-09T10:00:00.000Z"
}
]
}
POST/payments/orders/{orderId}/fulfillments

Fulfill an order by recording tracking details and the items shipped.

scope payments/orders.writeauth Location token or PIT

Send every field in the table below. Each entry in items names a price on the order by priceId (see Products & Prices) and the quantity shipped in qty.

Terminal window
curl -X POST https://services.smbcrm.com/payments/orders/<order_id>/fulfillments \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"altId": "<location_id>",
"altType": "location",
"trackings": [
{
"trackingNumber": "40012345678",
"shippingCarrier": "FedEx",
"trackingUrl": "https://www.fedex.com/wtrk/track/?trknbr=40012345678"
}
],
"items": [{ "priceId": "<price_id>", "qty": 1 }],
"notifyCustomer": true
}'

The response wraps the new fulfillment in data. It has the same shape as one item from the list above.

200 OK
{
"status": true,
"data": {
"_id": "<fulfillment_id>",
"altId": "<location_id>",
"altType": "location",
"trackings": [
{
"trackingNumber": "40012345678",
"shippingCarrier": "FedEx",
"trackingUrl": "https://www.fedex.com/wtrk/track/?trknbr=40012345678"
}
],
"items": [
{
"_id": "<price_id>",
"name": "Starter Kit",
"product": {
"_id": "<product_id>",
"locationId": "<location_id>",
"name": "Starter Kit",
"productType": "PHYSICAL",
"createdAt": "2026-06-01T09:00:00.000Z",
"updatedAt": "2026-06-01T09:00:00.000Z"
},
"price": {
"_id": "<price_id>",
"name": "Default",
"type": "one_time",
"currency": "USD",
"amount": 149
},
"qty": 1
}
],
"createdAt": "2026-07-09T10:00:00.000Z",
"updatedAt": "2026-07-09T10:00:00.000Z"
}
}
Body field Type Required Description
altId string Yes Your <location_id>.
altType string Yes Always location.
trackings array Yes Shipment tracking details. Each entry takes trackingNumber, shippingCarrier, and trackingUrl.
items array Yes The items being fulfilled. Each entry requires priceId and qty.
notifyCustomer boolean Yes Set to true to send the customer a notification.
POST/payments/orders/{orderId}/record-payment

Record a manual payment against an order.

scope payments/orders.collectPaymentauth Location token or PIT

Use this when a customer pays outside the checkout, for example with cash, a cheque, or a bank transfer. A successful call marks the order as paid. If the order doesn’t exist, the call returns 400.

Terminal window
curl -X POST https://services.smbcrm.com/payments/orders/<order_id>/record-payment \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"altId": "<location_id>",
"altType": "location",
"mode": "card",
"card": { "type": "visa", "last4": "1234" },
"amount": 149,
"notes": "Paid in person"
}'
200 OK
{
"success": true
}
Body field Type Required Description
altId string Yes Your <location_id>.
altType string Yes Always location.
mode string Yes How the payment was made: cash, card, cheque, bank_transfer, or other.
card object No Card details. When you send it, type (visa, mastercard, or other) and last4 are both required.
cheque object No Cheque details. When you send it, number is required.
amount number No The amount being recorded.
notes string No A note to store with the transaction.
meta object No Extra data to store with the transaction.
isPartialPayment boolean No Set to true to record the payment as a partial payment.
GET/payments/orders/{orderId}/notes

List the notes on an order.

scope payments/orders.readonlyauth Location token or PIT

Returns the notes recorded on an order. altId and altType are required.

Terminal window
curl "https://services.smbcrm.com/payments/orders/<order_id>/notes?altId=<location_id>&altType=location" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
GET/payments/transactions

List payment transactions in your account.

scope payments/transactions.readonlyauth Location token or PIT

altId and altType are both required. Narrow the list with the filters below and page with limit and offset. To find the transactions behind one order, pass the order’s _id as entityId.

Terminal window
curl "https://services.smbcrm.com/payments/transactions?altId=<location_id>&altType=location&limit=20" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"data": [
{
"_id": "<transaction_id>",
"altId": "<location_id>",
"altType": "location",
"contactId": "<contact_id>",
"currency": "USD",
"amount": 149,
"status": "succeeded",
"liveMode": true,
"entityType": "order",
"entityId": "<order_id>",
"entitySourceType": "funnel",
"entitySourceName": "Checkout",
"paymentProviderType": "stripe",
"paymentMethod": { "card": { "brand": "visa", "last4": "1234" } },
"amountRefunded": 0,
"fulfilledAt": "2026-07-08T15:04:05.000Z",
"createdAt": "2026-07-08T15:04:00.000Z",
"updatedAt": "2026-07-08T15:04:05.000Z"
}
],
"totalCount": 1
}

status reports the outcome of the charge, for example succeeded. amountRefunded is the amount refunded on the transaction, and fulfilledAt is when the charge went through. Each record can also carry contactName, contactEmail, subscriptionId, chargeId, chargeSnapshot, ipAddress, and createdBy.

Query param Type Required Description
altId string Yes Your <location_id>.
altType string Yes Always location.
locationId string No The sub-account ID. Optional, since altId already identifies your account.
entityId string No Filter by the ID of the record the transaction belongs to, such as an order ID.
entitySourceType string No Filter by the source of the transaction, for example funnel.
entitySourceSubType string No Filter by the source sub-type, for example two_step_order_form.
subscriptionId string No Limit results to one subscription’s transactions.
contactId string No Limit results to one contact’s transactions.
paymentMode string No Filter by payment mode, for example live.
search string No Search by transaction name.
startAt string No Start of the date range, as YYYY-MM-DD.
endAt string No End of the date range, as YYYY-MM-DD.
limit number No Maximum number of transactions to return per page. Defaults to 10.
offset number No Number of transactions to skip, for pagination. Defaults to 0.
GET/payments/transactions/{transactionId}

Get a single transaction by ID.

scope payments/transactions.readonlyauth Location token or PIT

Pass the transaction’s _id as transactionId. altId and altType are required. An unknown transactionId returns 400.

Terminal window
curl "https://services.smbcrm.com/payments/transactions/<transaction_id>?altId=<location_id>&altType=location" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"_id": "<transaction_id>",
"altId": "<location_id>",
"altType": "location",
"contactId": "<contact_id>",
"currency": "USD",
"amount": 149,
"status": "succeeded",
"liveMode": true,
"entityType": "order",
"entityId": "<order_id>",
"entitySource": { "type": "funnel", "id": "<funnel_id>", "name": "Checkout" },
"paymentProvider": { "type": "stripe" },
"amountRefunded": 0,
"createdAt": "2026-07-08T15:04:00.000Z",
"updatedAt": "2026-07-08T15:04:05.000Z"
}

This response nests the source as entitySource and the provider as paymentProvider, where the list returns flat entitySourceType, entitySourceName, entitySourceId, and paymentProviderType fields. The full response also includes invoiceId, subscriptionId, receiptId, chargeId, contactSnapshot, markAsTest, isParent, and traceId.

Query param Type Required Description
altId string Yes Your <location_id>.
altType string Yes Always location.
locationId string No The sub-account ID. Optional, since altId already identifies your account.