The more advanced players support electronic data interchange (EDI), where your accounts receivable system connects to the buyer's accounts payable system. Many large companies require EDI for suppliers who generate a lot of invoices, so they aren't re-entering invoice data into their own systems.[1] Any new system should have EDI interchange with at least all Fortune 1000 companies.
There are "gateway" companies which handle talking to large numbers of other companies.[2] Once you get this all working, your invoice goes out to the gateway, the gateway formats it and sends it to the paying company, the paying company's systems validate the bill, and they do a funds transfer to your bank account, which is matched to another EDI transaction indicating payment. For most routine transactions, there's no human intervention.
Make that all work for small/medium businesses, and you have a unique product.
The API is "dead simple" because it doesn't handle any of the hard cases. Like "We ordered 1000 but 200 didn't arrive. We're paying for only 800".
[1] http://www.aepedi.com/apay.htm [2] http://www.b2bgateway.net/
"Paid is a simple API" but yet you "Many large companies require EDI"?
"It's just an invoicing program." aka "Instagram is just a photo sharing app". Btw invoicing programs aren't trivial (speaking of experience). Even when looking at basic features it is still about actual money.
See Freshbooks. They also started as a dead-simple invoicing system. I think without EDI. And I believe they still don't have EDI. They've grown very nicely over the years.
The only thing I was missing from the API (maybe those are there but left out in the docs, which would be totally fine) are links between your resources (to make it a bit more actual REST). You already more promimently documented the usecase ("create an invoice") instead of listing URL endpoints, but with links between the resources, the API becomes even more discoverable for new developers.
Oh, one more minor thing: "Paid uses UTC unix timestamps for all dates and times." -- I was under the impression that unix timestamps are always UTC anyway (i.e. it's defined as "seconds since 1970-01-01 UTC")? If I'm wrong, please correct me :)
Not sure what you mean by "links between your resources." Have an example? May be there (or we can build it if not).
Correct on Unix time. Just being extra redundant.
[1] http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hyperte...
[2] http://stateless.co/hal_specification.html
Here's my problems:
1. Some of my customers pay by check
2. Sometimes my customers have an out of date credit card, or haven't given it to me yet, and Stripe won't let me change their subscription to one that charges them.
3. I occasionally do both charges, credits and invoiceitems for in Stripe
4. I have written a lot of Stripe specific code, and would prefer to gradually try out your solution (it might not work, no offense) Can I try it out without moving completely over?
2. If your customer's card is out of date, we prompt the customer to update their card and store it back to Stripe for you.
3. You aren't alone. Some customers use us for pieces of their transaction volume (i.e. only the invoiced customers or only customer paying via ACH)
4. A la #3, you can send us a portion or all. We're also happy to help you get started. It's free to get set up, so you can try it out. We also provide a test environment so you can play around with it as much as you want.
Feel free to always shoot us an email at hello@paidapi.com.!
We help companies with APIs improve their developer onboarding process, which means we invoice both monthly services (like creating and maintaining high quality API libraries), as well as one-off consulting (like updating documentation and creating "Getting Started" guides), and Paid has been great for both use cases.
Do you have any specific questions?
Full Disclosure - Paid is a customer of ours as well, so we may be slightly biased :D
I'm trying to gain experience in building APIs and yours seems like a good model for doing so :)
Definitely a "once seen, can't unsee" type of thing but I'll admit I didn't notice it initially. :)