First Steps

Dive into what's needed to start accepting payments within your software. Spoiler alert: you'll be pleasantly surprised at how seamless our setup process is.

Register a Sandbox Account

Get started with Tilled by creating a free sandbox account. Your test account gives you access to the sandbox Partner Console, which is an online dashboard where you can manage your integration.

Your sandbox Partner Console account allows you to:

  • Make test payments
  • Invite team members
  • Generate API keys
  • Setup webhooks

Create Secret and Publishable API Keys

Create API keys from our Partner Console to be used in your API calls.

Create or Retrieve a Connected Account

View your list of merchant accounts and either utilize the auto-created demo accounts or create your own merchant account. You may prefix the name of the account with an asterisk (e.g. *ACME Inc.) to bypass needing to submit an onboarding form.

The demo accounts are Shovel Shop (demo) and Maple Shop (demo) , with each demo account using a different currency. For instance:

  • Shovel Shop = United Stated Dollar (USD)
  • Maple Shop = Canadian Dollar (CAD)
Attempting to process a USD purchase on Maple Shop (demo) and a CAD payment on Shovel Shop (demo) will result in an error.

Process Your First Test Payment

Create a Payment Method

When creating payment methods of type=card, instead of passing card numbers directly, we strongly recommend using Tilled.js. We've created a simple payment example project using Node.js to help integrate Tilled.js.

However, if you'd still like to create a payment method via the API with test card numbers:

1$ curl -X POST \
2-H "tilled-api-key: {%raw%}{{SECRET_KEY}}{%endraw%}" \
3-H "tilled-account: {%raw%}{{MERCHANT_ACCOUNT_ID}}{%endraw%}" \
4-H "Content-Type: application/json" \
5-d '{"card":{"number":"4111111111111111","exp_month":8,"exp_year":2026},"billing_details":{"address":{"zip":"80301","country":"US"},"name":"John Doe"},"type":"card"}'

Example response:

 2  "card": {
 3    "brand": "visa",
 4    "last4": "1111",
 5    "funding": "credit",
 6    "exp_year": 2026,
 7    "exp_month": 8,
 8    "holder_name": "John Doe"
 9  },
10  "chargeable": true,
11  "id": "pm_cUfzDJXONNK9bsm4veVXQ",
12  "type": "card",
13  "expires_at": "2021-11-11T00:00:02.331Z", // 15 minutes after creation
14  "billing_details": {
15    "name": "John Doe",
16    "address": { "zip": "80301", "country": "US" }
17  },
18  ...

Create and Confirm a Payment Intent

1$ curl -X POST \
2-H "tilled-api-key: {%raw%}{{SECRET_KEY}}{%endraw%}" \
3-H "tilled-account: {%raw%}{{MERCHANT_ACCOUNT_ID}}{%endraw%}" \
4-H "Content-Type: application/json" \
5-d '{ "amount": 1099, "currency": "usd", "payment_method_types": ["card"], "payment_method_id": "pm_uCFzDJXONNK9bsm4veVXQ", "confirm": true }'

Example response:

 2  "id": "pi_JL8QI8hXvkI33177EOKFw",
 3  "amount": 1099,
 4  "currency": "usd",
 5  "status": "succeeded",
 6  "payment_method": {
 7    ...
 8  },
 9  "charges": [
10    {
11      "id": "ch_yQ36dzG4Katn8WEzuhTmy",
12      "status": "succeeded",
13      "amount_captured": 1099,
14      "captured_at": "2021-11-11T00:04:07.000Z",
15      ...
16    }
17  ],
18  ...