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.
Orders
Section titled “Orders”altId is required. Narrow the list with the filters below and page with limit and offset.
curl "https://services.smbcrm.com/payments/orders?altId=<location_id>&limit=20" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "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. |
Pass the order’s _id as orderId. altId is required. An unknown orderId returns 400.
curl "https://services.smbcrm.com/payments/orders/<order_id>?altId=<location_id>" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "_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. |
Order fulfillments
Section titled “Order fulfillments”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.
altId and altType are required. Each fulfillment lists its trackings, the fulfilled items with their product and price details, and its timestamps.
curl "https://services.smbcrm.com/payments/orders/<order_id>/fulfillments?altId=<location_id>&altType=location" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "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" } ]}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.
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.
{ "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. |
Record a payment
Section titled “Record a payment”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.
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" }'{ "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. |
Order notes
Section titled “Order notes”Returns the notes recorded on an order. altId and altType are required.
curl "https://services.smbcrm.com/payments/orders/<order_id>/notes?altId=<location_id>&altType=location" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"Transactions
Section titled “Transactions”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.
curl "https://services.smbcrm.com/payments/transactions?altId=<location_id>&altType=location&limit=20" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "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. |
Pass the transaction’s _id as transactionId. altId and altType are required. An unknown transactionId returns 400.
curl "https://services.smbcrm.com/payments/transactions/<transaction_id>?altId=<location_id>&altType=location" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "_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. |
Related
Section titled “Related”- Payments overview: all payment resources.
- Subscriptions: recurring payment records.
- Invoices & Estimates: bill customers directly.
