Create Transaction

Transactions

POST https://api.synapsefi.com/v3.1/users/:user_id/nodes/:node_id/trans

This endpoint allows you to create a transaction.

Path Parameters

NameTypeDescription

node_id

string

ID of the node.

user_id

string

ID of the user.

Headers

NameTypeDescription

X-SP-USER

string

User's OAuth key and device fingerprint, separated by a pipe.

X-SP-USER-IP

string

IP address of user's device.

X-SP-GATEWAY

string

Your Client ID and Secret, separated by a pipe.

{
    "_id": "5fea57e174a834ac69203672",
    "_links": {
        "self": {
            "href": "https://uat-api.synapsefi.com/v3.1/users/5fe50a777562960078d3a5c6/nodes/5fe50b2dab6ce7004340c43a/trans/5fea57e174a834ac69203672"
        }
    },
    "_v": 2,
    "amount": {
        "amount": 100.1,
        "currency": "USD"
    },
    "client": {
        "id": "589acd9ecb3cd400fa75ac06",
        "name": "* SynapseFi"
    },
    "extra": {
        "asset": null,
        "created_on": 1609193441254,
        "group_id": null,
        "ip": "255.127.79.76",
        "latlon": "unknown,unknown",
        "location": {
            "address_city": null,
            "address_country_code": null,
            "address_postal_code": null,
            "address_subdivision": null,
            "lat": 0,
            "lon": 0
        },
        "note": "Test transaction",
        "other": {
            "affect_limits": true,
            "attachments": [],
            "chargeback_disputed": false,
            "dispute_form": null,
            "dispute_meta": {},
            "dispute_reason": null,
            "disputed": false,
            "is_provisional_credit": false
        },
        "process_on": 1609193441254,
        "rate": null,
        "rate_limit": null,
        "same_day": false,
        "settlement_delay": 0,
        "supp_id": "",
        "tracking_number": null
    },
    "fees": [
        {
            "fee": 0.0,
            "note": "Facilitator Fee",
            "to": {
                "id": "None"
            }
        }
    ],
    "from": {
        "id": "5fe50b2dab6ce7004340c43a",
        "nickname": "SynapsePay Test Checking Account - 8901",
        "type": "ACH-US",
        "user": {
            "_id": "5fe50a777562960078d3a5c6",
            "legal_names": [
                "Test User"
            ]
        }
    },
    "recent_status": {
        "date": 1609193441254,
        "note": "Transaction Created.",
        "status": "CREATED",
        "status_id": "1"
    },
    "timeline": [
        {
            "date": 1609193441254,
            "note": "Transaction Created.",
            "status": "CREATED",
            "status_id": "1"
        }
    ],
    "to": {
        "id": "5fe96562c54d7b7bcda9b9da",
        "nickname": "My Deposit Account",
        "type": "DEPOSIT-US",
        "user": {
            "_id": "5fe50a777562960078d3a5c6",
            "legal_names": [
                "Test User"
            ]
        }
    }
}

Please note that RDFI ACH, Wire Transactions, Internal Transactions and Card Transactions are transactions that cannot be created by the API as by the very nature of the transaction, the user accounts receive them vs create them via the API.

Go to Transaction Object Details to see all the required and optional body parameters allowed during transaction creation. Following are a few examples of various types of transactions and how to create them:

Create Transactions between Nodes

Below is an example of how to create a transaction between two nodes that exist in Synapse. If you wish to cover transaction fees, see our transaction fee resource.

POST /v3.1/users/5fe50a777562960078d3a5c6/nodes/5fe50b2dab6ce7004340c43a/trans HTTP/1.1
Host: uat-api.synapsefi.com
X-SP-USER-IP: 255.127.79.76
X-SP-USER: oauth_ohpVj1iwMQgqHR0ATzbGEU4fBuXOJ0FWZk28y7cD|e83cf6ddcf778e37bfe3d48fc78a6502062fc
Content-Type: application/json

{
  "to": {
    "type": "DEPOSIT-US",
    "id": "5fe96562c54d7b7bcda9b9da"
  },
  "amount": {
    "amount": 100.1,
    "currency": "USD"
  },
  "extra": {
    "ip": "255.127.79.76",
    "note": "Test transaction"
  }
}

Create RDC Transactions

Unlike Transactions between Nodes, for RDC transactions, both from and to nodes are part of the payload, while from is not really a node, its the RDC data:

POST /v3.1/users/5fe50a777562960078d3a5c6/nodes/5fe96562c54d7b7bcda9b9da/trans HTTP/1.1
Host: uat-api.synapsefi.com
X-SP-USER-IP: 255.127.79.76
X-SP-USER: oauth_ohpVj1iwMQgqHR0ATzbGEU4fBuXOJ0FWZk28y7cD|e83cf6ddcf778e37bfe3d48fc78a6502062fc
Content-Type: application/json

{
  "from":{
  	"type":"RDC",
  	"meta":{
  		"check_front":"data:image/gif;base64,SUQs==",
  		"check_back":"data:image/gif;base64,SUQs=="
  	}
  },
  "to": {
    "type": "DEPOSIT-US",
    "id": "5fe96562c54d7b7bcda9b9da"
  },
  "amount": {
    "amount": 500.1,
    "currency": "USD"
  },
  "extra": {
    "ip": "255.127.79.76",
    "note": "Test transaction"
  }
}

For a submitted RDC transaction to be processed, we also look for the following:

  • The image is clear enough to read all of the text on the front and back of the check. (i.e no glare, shadows on the check images) and all corners of the check are visible.

  • The check does not have “VOID” or “VOIDED” written on it.

  • The check is not a traveler’s check or substitute check.

  • The check amount is in U.S. dollars (USD).

  • The two amounts written on the check are for the same amount.

  • The routing number in the MIRC line has 9 digits.

  • The handwriting on the check looks consistent in all fields.

  • The payee’s name is the same as the Synapse account holder’s name.

  • The check number in the MICR line is the same as the check number in the top right corner.

  • The check written date is in the past.

  • The payer’s bank information has a logo and name.

  • The check has security features: microprinting on the signature line, security screen on the back of the check, and/or the words “original document” on the back of the check.

  • The check signature does not have any stains or gaps around it, nor a digitized appearance (pixelated), or unnecessary up and down pen strokes.

  • Nothing on either the front or back of the check appears forged or altered.

  • The check is signed on the back in the “Endorse here” section.

  • The signature on the back is different from the signature on the front.

  • “For mobile deposit only” is written on the back of the check.

Please Note: Attempt to deposit in person before remote submittal will cause check to be declined.

If it is a cashier’s check:

  • The payee’s name is printed onto the check.

  • The bank phone number is shown on the check.

If it is a Deluxe or e-check:

  • The check does not include any confirmation requirement prior to depositing it.

Covering Transaction Fees

By default, fees are deducted from the fund recipient. This means if you send $1, the fund recipient will receive $1 minus the transaction fee. If you prefer to cover your user's transaction fees, pre-fund a deposit account from which fees will be deducted. Then set fees.fee to the negative of whatever the transaction fee will be, and fees.to.id to the node ID of the pre-funded deposit account.

Note: fees.fee is expected to be a float in dollars (USD).

POST /v3.1/users/61281d15b72f862f1a97e6e2/nodes/61281d22ab6ce721377d53ec/trans HTTP/1.1
Host: uat-api.synapsefi.com
X-SP-USER-IP: 255.127.79.76
X-SP-USER: oauth_qWTA0DPUc5lC4sxjfnd9eYQLhIG8w3motKbE6uOk|e83cf6ddcf778e37bfe3d48fc78a6502062fc
Content-Type: application/json
Content-Length: 344

{
  "to": {
    "type": "DEPOSIT-US",
    "id": "61281d317e08873466a0e7b1"
  },
  "amount": {
    "amount": 100.0,
    "currency": "USD"
  },
  "extra": {
    "ip": "255.127.79.76",
    "note": "Test Transaction"
  },
  "fees": [{
    "fee":-0.03,
    "note": "Facilitator Fee",
    "to": {
        "id":"60be880b7e08876cd9349cf4"
    }

  }]
}

In the response, you will see two fees: one positive & one negative (corresponding with our Synapse-owned node & your pre-funded node respectively).

Please note that this payload only applies to transactions initiated via the API. To cover incoming wire fees from an EXTERNAL-US node, update your wire fee preferences in the dashboard.

Avoiding Race Conditions

Given that funds are made unavailable during the processing-debit stage in a transactions lifecycle, it is advised to not generate new transactions against the same node too quickly. The impact otherwise can be that a later transaction can settle before an earlier transaction, causing a node to go negative.

Suggestions to avoid this scenario include:

  • Delay same node transaction creation 4 to 5 seconds in-between.

  • Wait for the create webhook to be received.

Last updated