The Crowdtilt API opens up the opportunity for developers to:
- Offer a group payments option in their applications.
- Offer a pre-sales commerce option in their applications.
- Develop a crowdfunding application (i.e., single project model like Lockitron or multi-project model like Kickstarter).
- Develop a social fundraising application.
- Enable the collaboration around these styles of commerce.
What we think is cool about the Crowdtilt API:
- Developers can use the Crowdtilt API with their own payment processor as it works with Stripe, Balanced, BrainTree.
- Though we have the above preferred partners for the Crowdtilt API already built out and ready to use, our API is actually built around our universal payments interface, which allows developers to integrate any payment processor from around the world right into our system. For more information about how to get access to this interface to build support for your favorite processor, drop us a note at [email protected].
- The API also works with credit cards and ACH debit payments or a combination of these.
- The API provides collaboration tools such as commenting/updates, nested comments, messaging, notifications, and tracking of those that have paid and those that haven't.
- The API supports both multiple currencies and international languages.
- Introduction
- Security
- Use-Cases
- Getting Started
- User Resources
- Campaign Resources
- Examples
- Resource Definitions
- Pagination
It is important to understand that the Crowdtilt API is a layer of abstraction on top payment processors. Currently, we support Balanced, which is recommended for multi-project services such as Kickstarter. We also support Stripe, which is suitable for single-project services such as Lockitron. Finally, we support Braintree, which is highly suitable for international projects.
When interacting with a payment gateway, the focus is highly transactional and payment-based. We consider a payment to be simply a part of a whole. Our API helps you focus on the whole.
The API defines 3 main objects: campaign
, user
, and payment
. At a
very high-level, a campaign
represents a monetary goal that one or more
users
try to achieve through payments
. The campaign can define multiple
payment policies such as fixed payments
, e.g, tickets, or variable payments
, e.g., donations.
Payments
are simply a way for users to achieve the campaign goal. We believe
that a good crowdfunding service should support any type of payment. Therefore,
we are working on supporting as many payment methods as possible. Currently, we
support credit cards and ACH debits.
When the campaign is created, it has to have at least one user
to act as the
owner or the campaign admin. Once the campaign goal is achieved, the money is
sent to the campaign admin according to the policies defined when the campaign
was created.
Here is a full definition for each one of those objects: campaign, user, payment.
Crowdtilt is fully PCI compliant and security is of paramount importance to our team. Crowdtilt forces HTTPS for all services, including our public website. All data is stored in a Payment Industry Data Security Standard (PCI DSS) Compliant environment.
Implementors of the beta API, for now, must be PCI compliant as well. However, we will be able to offer javascript tokenization for non-PCI compliant consumers soon as well as our group-payments javascript button for the lightest integration possible for both PCI and non-PCI compliant consumers alike.
We investigate all reported security issues with extreme immediacy. If you believe you've found any security issues, please email us at [email protected]. Though usually faster, we guarantee a direct response within 24 hours. We ask that you do not disclose a security bug publicly until it has been addressed by our team.
The Crowdtilt API can be used in a single-project environment (i.e. app.net/lockitron.com), a multi-project environment (a la Kickstarter), or for simple Group Payments. This includes things like group vacation bookings/rentals, wedding gifts, bachelor parties, and the list goes on. We know we're only scratching the surface of what can be done with this API, and we're sure our users will find countless other creative and clever ways to utilize our API.
We have friends looking to use our API to build a Mission-Trip focused, non-profit crowdfunding platform, and other developers interested in building a bill-splitting mobile application. If you have any questions about how your use-case or idea could utilize our API, don't hesitate to ask!
The first step is to get an API_KEY
and API_SECRET
. During our beta
program, please contact
[email protected]
to request these. Once you receive your Crowdtilt API credentials, you are
ready to use the API. Remember that all API requests have to go over SSL.
To help you build your application, we provide a sandbox environment that you can use for testing. Use the base URI below:
https://api-sandbox.crowdtilt.com/v1
The sandbox environment will be configured with a free Balanced account. If you need support for a different payment processor, please let us know.
We are big fans of simplicity. Therefore, we support Basic Authentication
over SSL. You can simply use curl
to test our API in 2 seconds.
$ curl -u API_KEY:API_SECRET https://api-sandbox.crowdtilt.com/v1
If the credentials provided were invalid, the API will respond with
401 => Unauthorized
Currently, we only support JSON data formats. If you think we should support other data formats, please let us know what and why [email protected].
Unfortunately, we don't have client libraries, yet. If you write one, let us know and we'll link to it.
We like hanging out on IRC, a lot. Feel free to come hang out with us #crowdtilt at freenode. You can also send an email to [email protected].
We need your help and we would love to get you involved. Feel free to create github issues, give feedback and comment, submit pull requests, or review specs. You can even ask for new features and vote on the ones you like to be a higher priority.
Any proposed spec change will be in a separate "feature" branch. Once we have a
consensus from the community on the spec change, it'll be merged into dev
branch, which means that the Crowdtilt team will start working on it. Once it is fully
implemented and ready to go to production, it'll get merged to the master
branch.
Path | HTTP Methods | Description |
---|---|---|
/users | GET POST | List of users |
/users/authentication | GET | Authenticate a user |
/users/:id | GET PUT | A specific user |
/users/:id/verification | POST | Verify a user to receive payments |
/users/:id/campaigns | GET | All campaigns the user is involved with |
/users/:id/paid_campaigns | GET | Campaigns this user paid for |
/users/:id/cards | GET POST | User credit cards |
/users/:id/cards/:id | GET PUT DELETE | A specific credit card |
/users/:id/banks | GET POST | User bank accounts |
/users/:id/banks/:id | GET PUT DELETE | A specific bank account |
/users/:id/payments | GET | A list of Users payments |
POST /users
$ curl -X POST -H Content-Type:application/json \
-u key:secret https://api-sandbox.crowdtilt.com/v1/users \
-d'
{
"user" : {
"firstname" : "foo",
"lastname" : "bar",
"email" : "[email protected]"
}
}'
{
"user": {
"id": "USREC5",
"email": "[email protected]",
"firstname": "Foo",
"lastname": "Bar",
"is_verified": 0,
"img": "https://example.com/profile.png",
"creation_date": "2011-07-02T14:20:48Z",
"last_login_date": "2012-09-22T01:55:49Z",
"uri": "/v1/users/USREC5",
"campaigns_uri": "/v1/users/USREC5/campaigns",
"paid_campaigns_uri": "/v1/users/USREC5/paid_campaigns",
"payments_uri": "/v1/users/USREC5/payments",
"metadata": {}
}
}
201 => Created
400 => Bad Request
In order for a user to receive money raised from a campaign, the user's identity
needs to be verified. A user is verified by POST
ing verification data to the
/users/:id/verification
.
The verification data is as follows:
name
- should be the real name of the userdob
- the date of birth of the user in the format YYYY-MMphone_number
- the user's phone numberstreet_address
- the user's street addresspostal code
- the user's postal code
In some cases, if the user cannot be fully verified with this information, we
may return a 449
response indicating that we need more info. In these cases
you should re-post the data with the additional ssn
field containing the
user's social security number for additional verification.
Once the verification has succeeded, is_verified
on the user object
will be set to 1 to reflect this change.
POST /users/:id/verification
$ curl -X POST -H Content-Type:application/json -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5/verification \
-d'
{
"verification" : {
"name" : "Khaled Hussein",
"dob" : "1984-07",
"phone_number" : "(000) 000-0000",
"street_address" : "324 awesome address, awesome city, CA",
"postal_code" : "12345"
}
}'
{}
200 => OK
400 => Bad Data, or Could not Verify admin information
449 => Retry with SSN
To authenticate a user, you can pass in the user's login credentials, email and password, as query parameters.
GET /users/[email protected]&password=mypassword
{
"user" : {
"id" : "USRB07",
"firstname" : "foo",
"lastname" : "bar",
"img" : null,
"email" : "[email protected]",
"is_verified" : 0,
"creation_date" : "2012-09-26T10:22:03.900529000Z",
"last_login_date" : "2012-09-26T17:22:20Z"
}
}
302 => Found
401 => Unauthorized
GET /users/:id
$ curl -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5
{
"user": {
"id": "USREC5",
"email": "[email protected]",
"firstname": "Foo",
"lastname": "Bar",
"is_verified": 1,
"img": "https://example.com/profile.png",
"creation_date": "2011-07-02T14:20:48Z",
"last_login_date": "2012-09-22T01:55:49Z",
"uri": "/v1/users/USREC5",
"campaigns_uri": "/v1/users/USREC5/campaigns",
"paid_campaigns_uri": "/v1/users/USREC5/paid_campaigns",
"payments_uri": "/v1/users/USREC5/payments",
"metadata": {}
}
}
200 => OK
GET /users
$ curl -u key:secret https://api-sandbox.crowdtilt.com/v1/users
{
"pagination": {
"total_pages": 1,
"page": 1,
"total_entries": 2,
"per_page": 50
},
"users": [
{
"id": "USREC5",
"email": "[email protected]",
"firstname": "Foo",
"lastname": "Bar",
"is_verified": 0,
"img": "https://example.com/profile.png",
"creation_date": "2011-07-02T14:20:48Z",
"last_login_date": "2012-09-22T01:55:49Z",
"uri": "/v1/users/USREC5",
"campaigns_uri": "/v1/users/USREC5/campaigns",
"paid_campaigns_uri": "/v1/users/USREC5/paid_campaigns",
"payments_uri": "/v1/users/USREC5/payments",
"metadata": {}
},
.
.
.
]
}
200 => OK
Currently, this request supports partial PUTs. For example, you can do a request to update a single attribute without having to send the full user object.
PUT /users/:id
$ curl -X PUT -HContent-Type:application/json -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5 \
-d'
{
"user": {
"lastname": "new last name"
}
}'
{
"user": {
"id": "USREC5",
"email": "[email protected]",
"firstname": "Foo",
"lastname": "new last name",
"is_verified": 0,
"img": "https://example.com/profile.png",
"creation_date": "2011-07-02T14:20:48Z",
"last_login_date": "2012-09-22T01:55:49Z",
"uri": "/v1/users/USREC5",
"campaigns_uri": "/v1/users/USREC5/campaigns",
"paid_campaigns_uri": "/v1/users/USREC5/paid_campaigns",
"payments_uri": "/v1/users/USREC5/payments",
"metadata": {}
}
}
200 => OK
This resource returns all the campaigns that the user has created as well as the campaigns that he paid for.
GET /users/:id/campaigns
$ curl -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5/campaigns
{
"pagination": {
"total_pages": 0,
"page": 1,
"total_entries": 0,
"per_page": 50
},
"campaigns": [
{
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"is_tilted": 0,
"is_paid": 0,
"is_expired": 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
},
.
.
.
]
}
200 => OK
This resource returns a specific campaign created by this user.
GET /users/:id/campaigns/:id
$ curl -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5/campaigns/CMP96B
{
"campaign" : {
"img" : null,
"metadata" : { },
"id" : "CMP96B",
"is_paid" : 0,
"privacy" : 1,
"is_expired" : 1,
"fixed_payment_amount" : 0,
"tilt_amount" : 100,
"description" : "some description",
"uri" : "/v1/campaigns/CMP96B",
"creation_date" : "2012-10-19T15:09:01.869085000Z",
"first_contributor" : { "id" : "USR123", "uri" : "/v1/users/USR123", ... },
"tilter" : { "id" : "USR456", "uri" : "/v1/users/USR456", ... },
"user_id" : "USR521",
"title" : "some title",
"modification_date" : "2012-10-19T15:09:01.869085000Z",
"stats" : {
"tilt_percent" : 0,
"raised_amount" : 0,
"unique_contributors" : 0,
"number_of_payments" : 0
},
"expiration_date" : "2000-01-02T01:02:03Z",
"is_tilted" : 0,
"admin": { "id": "USREC5", ... },
"min_payment_amount" : 0,
"tax_id" : null,
"tax_name" : null,
"payments_uri" : "/v1/campaigns/CMP96B/payments"
}
}
200 => OK
This resource returns all the campaigns that the user paid for.
GET /users/:id/paid_campaigns
$ curl -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USREC5/campaigns/CMP96B
{
"pagination": {
"total_pages": 0,
"page": 1,
"total_entries": 0,
"per_page": 50
},
"campaigns": [
{
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"is_tilted": 0,
"is_paid": 0,
"is_expired": 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
},
.
.
.
]
}
200 => OK
POST /users/:id/cards
$ curl -X POST -u key:secret -H Content-Type:application/json\
https://api-sandbox.crowdtilt.com/v1/users/USR50A/cards\
-d'
{
"card": {
"expiration_year":2023,
"security_code":123,
"expiration_month":"01",
"number":"4111111111111111"
}
}
'
{
"cards" : [
{
"last_four" : "1111",
"expiration_year" : 2023,
"expiration_month" : "01",
"user": { "id" : "USR50A", "uri" : "/v1/users/USR50A", ... },
"uri" : "/v1/users/USR50A/cards/CCP6D6",
"card_type" : "VISA card",
"creation_date" : "2012-08-23T07:42:46.134467000Z",
"metadata" : {},
"id" : "CCP6D6E7E7C0C5C11E2BD7001E2CFE628C0"
},
...
]
}
201 => Created
GET /users/:id/cards/:id
$ curl -u key:secret \
https://api-sandbox.crowdtilt.com/v1/users/USR50A/cards/CCP6D6
{
"card": {
"last_four" : "1234",
"expiration_year" : 2034,
"expiration_month" : "04",
"user": { "id" : "USR50A", "uri" : "/v1/users/USR50A", ... },
"uri" : "/v1/users/USR50A/cards/CCP6D6",
"card_type" : null,
"creation_date" : "2012-08-23T07:42:46.134467000Z",
"metadata" : {},
"id" : "CCP6D6E7E7C0C5C11E2BD7001E2CFE628C0"
}
}
200 => OK
GET /users/:id/cards
{
"pagination": {
"total_pages": 0,
"page": 1,
"total_entries": 0,
"per_page": 50
},
"cards": []
}
200 => OK
Card information cannot be updated once it is set. You can however, modify
the metadata
of a Card. That is the only thing modifiable with this
request. Other fields submitted will be ignored.
PUT /users/:id/cards/:id
{
"card": {
"metadata" : {
"key1" : "value1"
}
}
}
{
"card": {
"last_four" : "1234",
"expiration_year" : 2034,
"expiration_month" : "04",
"user": { "id": "USR50A", ... },
"uri" : "/v1/users/USR50A/cards/CCP6D6",
"card_type" : null,
"creation_date" : "2012-08-23T07:42:46.134467000Z",
"metadata" : {
"key1" : "value1"
},
"id" : "CCP6D6E7E7C0C5C11E2BD7001E2CFE628C0"
}
}
200 => OK
DELETE /users/:id/cards/:id
200 => OK
POST /users/:id/banks
{
"bank": {
"account_number" : "1234567890",
"name" : "Bank Name",
"bank_code" : "123451234",
}
}
{
"bank": {
"account_number_last_four" : "1234",
"metadata" : {},
"id" : "BAP688E65FA0C6D11E28914FE5E5CD73F12",
"name" : "Bank Name",
"user": { "id" : "USR54B", "uri" : "/v1/users/USR54B", ... },
"bank_code_last_four" : "1234",
"uri" : "/v1/users/USR54B/banks/BAP688"
}
}
201 => Created
GET /users/:id/banks/:id
{
"bank" : {
"account_number_last_four" : "1234",
"metadata" : {},
"id" : "BAP688E65FA0C6D11E28914FE5E5CD73F12",
"name" : "John Doe",
"user": { "id" : "USR54B", "uri" : "/v1/users/USR54B", ... },
"bank_code_last_four" : "1234",
"uri" : "/v1/users/USR54B/banks/BAP688"
}
}
200 => OK
This resource lists the bank accounts associated with this user.
GET /users/:id/banks
{
"pagination": {
"total_pages": 0,
"page": 1,
"total_entries": 0,
"per_page": 50
},
"banks": [
{
"account_number_last_four" : "1234",
"metadata" : {},
"id" : "BAP688E65FA0C6D11E28914FE5E5CD73F12",
"name" : "John Doe",
"user": { "id" : "USR54B", "uri" : "/v1/users/USR54B", ... },
"bank_code_last_four" : "1234",
"uri" : "/v1/users/USR54B/banks/BAP688"
}
]
}
200 => OK
Bank information cannot be updated once it is set. You can however, modify
the metadata
of a bank account. That is the only thing modifiable with this
request. Other fields submitted will be ignored.
PUT /users/:id/banks/:id
{
"bank" : {
"metadata" : {
"key1" : "value1"
}
}
}
{
"bank" : {
"account_number_last_four" : "1234",
"metadata" : {
"key1" : "value1"
},
"id" : "BAP688E65FA0C6D11E28914FE5E5CD73F12",
"name" : "John Doe",
"user": { "id" : "USR54B", "uri" : "/v1/users/USR54B", ... },
"bank_code_last_four" : "1234",
"uri" : "/v1/users/USR54B/banks/BAP688"
}
}
200 => OK
DELETE /users/:id/banks/:id
200 => OK
GET /users/:id/payments
{
"pagination": {
"total_pages": 0,
"page": 1,
"total_entries": 0,
"per_page": 50
},
"payments": []
}
200 => OK
Path | HTTP Methods | Description |
---|---|---|
/campaigns | GET POST | List of campaigns |
/campaigns/:id | GET PUT | A specific campaign |
/campaigns/:id/payments | GET POST PUT | Campaign Payments |
/campaigns/:id/rejected_payments | GET | Rejected Payments |
/campaigns/:id/payments/:id | GET | Details about a specific payment |
/campaigns/:id/payments/:id/refund | POST | Refunding a specific payment |
/campaigns/:id/settlements | GET | Campaign Settlements |
/campaigns/:id/settlements/:id | GET | Campaign Settlement |
/campaigns/:id/settlements/:id/bank | POST | Update a Campaign Settlement Bank |
/campaigns/:id/comments | GET POST | Campaign Comments |
/campaigns/:id/comments/:id | GET PUT DELETE | Details about (or delete) a specific comment |
A campaign needs to be associated to a user. We refer to this user as the "campaign admin". Campaign admins can create campaigns without having to be verified. However, they need to be verified in order to set up their bank account details and then be able to receive the money collected in their campaign.
POST /campaigns
{
"campaign": {
"user_id":"USREC5",
"title":"Campaign Title",
"description":"some description",
"expiration_date":"2000-01-02T01:02:03Z",
"tilt_amount":100
}
}
{
"campaign": {
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"type": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"creation_date": "2000-01-02T01:02:03Z",
"modification_date": "2000-01-02T01:02:03Z",
"img": null,
"is_tilted": 0,
"is_paid": 0,
"is_expired": 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
}
}
201 => Created
GET /campaigns/:id
{
"campaign": {
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"type": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"creation_date": "2000-01-02T01:02:03Z",
"modification_date": "2000-01-02T01:02:03Z",
"img": "https://url.to/img.jpg",
"is_tilted": 0,
"is_paid": 0,
"is_expired": 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
}
}
200 => OK
GET /campaigns
{
"pagination": {
"total_pages": 34337,
"page": 1,
"total_entries": 1716893,
"per_page": 50
},
"campaigns": [
{
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"type": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"creation_date": "2000-01-02T01:02:03Z",
"modification_date": "2000-01-02T01:02:03Z",
"img": "https://url.to/img.jpg",
"is_tilted": 0,
"is_paid": 0,
"is_expired" : 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
},
.
.
.
]
}
200 => OK
Currently, this request supports partial PUTs. For example, you can do a request to update a single attribute without having to send the full campaign object.
PUT /campaigns/:id
{
"campaign": {
"id": "CMPBDA",
"user_id": "USREC5",
"title": "Campaign Title",
"description": "some description",
"privacy": 1,
"type": 1,
"tilt_amount": 100,
"min_payment_amount": 0,
"fixed_payment_amount": 0,
"expiration_date": "2000-01-02T01:02:03Z",
"creation_date": "2000-01-02T01:02:03Z",
"modification_date": "2000-01-02T01:02:03Z",
"img": "https://url.to/img.jpg",
"is_tilted": 0,
"is_paid": 0,
"is_expired": 0,
"tax_id": null,
"tax_name": null,
"uri": "/v1/campaigns/CMPBDA",
"admin": { "id": "USREC5", "uri": "/v1/users/USREC5", ... },
"payments_uri": "/v1/campaigns/CMPBDA/payments",
"metadata": { },
"stats": {
"tilt_percent": 0,
"raised_amount": 0,
"unique_contributors": 0,
"number_of_payments": 0
}
}
}
200 => OK
Before a user is able to contribute, they need to have a Credit Card associated to them. All amounts and prices used in this API are always in cents.
When creating a payment, the amount
field determines how much money is
going to the campaign. The user_fee_amount
accepts a value that will be
charged to the paying user, on top of the amount
, and the admin_fee_amount
will be taken out of the money that goes to the campaign admin when the campaign
tilts.
For example, if a user wants to pay $20.00
to a campaign, and you want to add
a 2% fee to the user, you would send amount
as 2000
and user_fee_amount
as
40
(2% of the $20.00
). The users credit card would then be charged
$20.40
. In the same scenario, if you wanted to charge 2% from the admin
when the campaign tilts, you would set admin_fee_amount
to 40
and on tilt
the admin will only receive $19.60
from the $20.00
payment.
POST /campaigns/:id/payments
{
"payment": {
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"user_id": "USR521",
"card_id": "CCPC41"
}
}
{
"payment" : {
"status" : "charged",
"modification_date" : "2012-10-20T15:45:47Z",
"metadata" : {},
"id" : "CON233",
"uri" : "/v1/campaigns/CMP96B/payments/CON233",
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"creation_date" : "2012-10-20T15:45:13Z",
"campaign" : { "id": "CMP96B", "uri" : "/v1/campaigns/CMP96B", ... },
"card" : { "id" : "CCPC41", "uri" : "/v1/users/USR521/cards/CCPC41", ... },
"user": { "id" : "USR521", "uri" : "/v1/users/USR521", ... },
}
}
201 => Created
GET /campaigns/:id/payments/:id
{
"payment" : {
"status" : "charged",
"modification_date" : "2012-10-20T15:45:47Z",
"metadata" : {},
"id" : "CON233",
"uri" : "/v1/campaigns/CMP96B/payments/CON233",
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"creation_date" : "2012-10-20T15:45:13Z",
"campaign" : { "id": "CMP96B", "uri" : "/v1/campaigns/CMP96B", ... },
"card" : { "id" : "CCPC41", "uri" : "/v1/users/USR521/cards/CCPC41", ... },
"user": { "id" : "USR521", "uri" : "/v1/users/USR521", ... },
}
}
200 => OK
You may update the credit card for payments. Note that you may only do this for payments with a status of "rejected".
PUT /campaigns/:id/payments/:id
{
"payment": {
"card_id": "CCPC42"
}
}
{
"payment" : {
"status" : "charged",
"modification_date" : "2012-10-20T15:45:47Z",
"metadata" : {},
"id" : "CON233",
"uri" : "/v1/campaigns/CMP96B/payments/CON233",
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"creation_date" : "2012-10-20T15:45:13Z",
"campaign" : { "id": "CMP96B", "uri" : "/v1/campaigns/CMP96B", ... },
"card" : { "id" : "CCPC42", "uri" : "/v1/users/USR521/cards/CCPC41", ... },
"user": { "id" : "USR521", "uri" : "/v1/users/USR521", ... },
}
}
200 => OK
GET /campaigns/:id/payments
{
"payments" : [
{
"status" : "charged",
"modification_date" : "2012-10-20T15:45:47Z",
"metadata" : {},
"id" : "CON233",
"uri" : "/v1/campaigns/CMP96B/payments/CON233",
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"creation_date" : "2012-10-20T15:45:13Z",
"campaign" : { "id": "CMP96B", "uri" : "/v1/campaigns/CMP96B", ... },
"card" : { "id" : "CCPC41", "uri" : "/v1/users/USR521/cards/CCPC41", ... },
"user": { "id" : "USR521", "uri" : "/v1/users/USR521", ... },
}
],
"pagination" : {
"total_pages" : 1,
"page" : 1,
"total_entries" : 1,
"per_page" : 50
}
}
200 => OK
GET /campaigns/:id/rejected_payments
{
"payments" : [
{
"status" : "rejected",
"modification_date" : "2012-10-20T15:45:47Z",
"metadata" : {},
"id" : "CON233",
"uri" : "/v1/campaigns/CMP96B/payments/CON233",
"amount" : 2000,
"user_fee_amount" : 40,
"admin_fee_amount" : 40,
"creation_date" : "2012-10-20T15:45:13Z",
"campaign" : { "id": "CMP96B", "uri" : "/v1/campaigns/CMP96B", ... },
"card" : { "id" : "CCPC41", "uri" : "/v1/users/USR521/cards/CCPC41", ... },
"user": { "id" : "USR521", "uri" : "/v1/users/USR521", ... },
}
],
"pagination" : {
"total_pages" : 1,
"page" : 1,
"total_entries" : 1,
"per_page" : 50
}
}
200 => OK
In order to refund a payment, simply POST with an empty body to the payment's refund subresource.
POST /campaigns/:id/payments/:id/refund
$ curl -X POST -u key:secret \
https://api-sandbox.crowdtilt.com/v1/campaigns/CMP96B/payments/CON233/refund
200 => OK
Campaign Settlements represent a disbursement of funds for a tilted campaign.
A campaign settlement will show you the campaign
, bank
, and user
that the
settlement
belongs to. It will also show you the admin_amount
, which is the
amount of money being sent to the admin's bank account. The escrow_amount
is how much money from the campaign is going into your escrow account (it
represents fees charged to the admin and payers). Possible statuses for a
campaign settlement are:
needs bank account
- this means that admin of the campaign needs to set up his or her bank account before the funds will be sent.pending
- this means that the funds are being transfered to the bank account specified in the settlement.rejected
- this means that the settlement was rejected and could not be sent to the bank account in question. In these cases, the bank account can be updated, as specified in the update campaign settlement section.re-sent pending
- this means that the settlement previously failed, but the bank account has been updated, and the funds are being transfered to the new bank account.cleared
- this means that the funds have cleared the bank account and the settlement has completed successfully.
GET /campaigns/:id/settlements
"settlements" : [
{
"id" : "SMTD88",
"status" : "pending",
"admin_amount" : 1960,
"escrow_amount" : 40,
"modification_date" : "2012-10-29T15:34:48.177091000Z",
"creation_date" : "2012-10-29T15:34:48.177091000Z",
"bank" : { "id" : "BAPCA3", "uri" : "/v1/users/USRC77/banks/BAPCA3", ... },
"campaign" : { "id" : "CMPCCC", "uri" : "/v1/campaigns/CMPCCC", ... },
"user" : { "id" : "USRC7B", "uri" : "/v1/users/USRC7B", ... }
},
.
.
.
],
"pagination" : {
"total_pages" : 1,
"page" : 1,
"total_entries" : 1,
"per_page" : 50
}
GET /campaigns/:id/settlements/:id
{
"settlement" : {
"id" : "SMTD88",
"status" : "pending",
"admin_amount" : 1960,
"escrow_amount" : 40,
"modification_date" : "2012-10-29T15:34:48.177091000Z",
"creation_date" : "2012-10-29T15:34:48.177091000Z",
"bank" : { "id" : "BAPCA3", "uri" : "/v1/users/USRC77/banks/BAPCA3", ... },
"campaign" : { "id" : "CMPCCC", "uri" : "/v1/campaigns/CMPCCC", ... },
"user" : { "id" : "USRC7B", "uri" : "/v1/users/USRC7B", ... }
}
}
A Campaign Settlement can only be updated if the status is needs bank account
.
In this instance, a bank
object can be sent with the id
of a new bank
account to re-attempt the settlement with.
POST /campaigns/:id/settlements/:id/bank
{
"bank" : { "id" : "BAPCA4" }
}
To create a comment, POST to /campaigns/:id/comments
.
The only required fields are the user_id
of the comment author
and the body
of the comment.
The title
, parent_id
, and score
fields are optional.
The parent_id
is the id of the parent of this comment, i.e.,
the comment that this comment is a reply to.
This only matters if you want to support nested comments.
You may provide a parent_id
of null for top-level comments.
The purpose of the score
field is to provide support for voting on comments.
POST /campaigns/:id/comments
{
"comment" : {
"user_id' : "USR123",
"title" : "Optional Title",
"body" : "Comment Body",
"score" : 1,
"parent_id" : null
}
}
{
"comment" : {
"id" : "CMT123",
"user_id' : "USR123",
"title" : "Optional Title",
"body" : "Comment Body",
"score" : 1,
"parent_id" : null,
"metadata" : { },
"creation_date" : "2012-10-01T00:00:00Z",
"modification_date" : "2012-10-01T00:00:00Z"
}
}
200 => OK
{
"comments" : [
{
"id" : "CMT123",
"user_id' : "USR123",
"title" : "Optional Title",
"body" : "Comment Body",
"score" : 1,
"parent_id" : null,
"metadata" : { },
"creation_date" : "2012-10-01T00:00:00Z",
"modification_date" : "2012-10-01T00:00:00Z"
},
...
]
}
200 => OK
GET /campaigns/:id/comments/:id
{
"comment" : {
"id" : "CMT123",
"user_id' : "USR123",
"title" : "Optional Title",
"body" : "Comment Body",
"score" : 1,
"parent_id" : null,
"metadata" : { },
"creation_date" : "2012-10-01T00:00:00Z",
"modification_date" : "2012-10-01T00:00:00Z"
}
}
200 => OK
Currently you can only alter the score and the metadata of a comment.
PUT /campaigns/:id/comments/:id
{
"comment" : {
"score" : 2,
"metadata" : {
"key" : "value",
}
}
}
{
"comment" : {
"id" : "CMT123",
"user_id' : "USR123",
"title" : "Optional Title",
"body" : "Comment Body",
"score" : 2,
"parent_id" : null,
"metadata" : {
"key" : "value",
},
"creation_date" : "2012-10-01T00:00:00Z",
"modification_date" : "2012-10-01T00:00:00Z"
}
}
200 => OK
DELETE /campaigns/:id/comments/:id
200 => OK
Generally the first thing you want to do is create some users. Let's create two users, an admin, and a contributor.
# Create the admin user
$ curl -X POST -u key:secret -H Content-Type:application/json \
https://api-sandbox.crowdtilt.com/v1/users \
-d'{
"user":{
"email" : "[email protected]"
}
}'
# Response
{
"user" : {
"last_login_date" : null,
"paid_campaigns_uri" : "/v1/users/USRC55/paid_campaigns",
"is_verified" : 0,
"uri" : "/v1/users/USRC55",
"firstname" : null,
"lastname" : null,
"email" : "[email protected]",
"creation_date" : "2012-10-31T00:41:55Z",
"metadata" : {},
"id" : "USRC55",
"campaigns_uri" : "/v1/users/USRC55/campaigns",
"payments_uri" : "/v1/users/USRC55/payments"
}
}
# Create the paying user
$ curl -X POST -u key:secret -H Content-Type:application/json \
https://api-sandbox.crowdtilt.com/v1/users \
-d'{
"user":{
"email" : "[email protected]"
}
}'
# Response
{
"user" : {
"last_login_date" : null,
"paid_campaigns_uri" : "/v1/users/USRE32/paid_campaigns",
"is_verified" : 0,
"uri" : "/v1/users/USRE32",
"firstname" : null,
"lastname" : null,
"email" : "[email protected]",
"creation_date" : "2012-10-31T00:41:55Z",
"metadata" : {},
"id" : "USRC55",
"campaigns_uri" : "/v1/users/USRE32/campaigns",
"payments_uri" : "/v1/users/USRE32/payments"
}
}
Once you've got some users, you can create a campaign for any of them. For this
example, we'll make the first user created above the admin
user, and use the
second user to make a payment on the campaign.
$ curl -X POST -u key:secret -H Content-Type:application/json \
https://api-sandbox.crowdtilt.com/v1/campaigns \
-d'{
"campaign" : {
"user_id" : "USRC55",
"expiration_date" : "2012-10-31T12:00:00Z",
"title" : "Halloween Awesome Fest",
"description" : "This will be the best thing ever!",
"tilt_amount" : 300000
}
}'
# Response
{
"campaign" : {
"img" : null,
"tilter" : null,
"min_payment_amount" : 0,
"first_contributor" : null,
"metadata" : {},
"id" : "CMP542",
"is_paid" : 0,
"settlements_uri" : "/v1/campaigns/CMP542/settlements",
"privacy" : 1,
"admin" : {
"firstname" : null,
"paid_campaigns_uri" : "/v1/users/USRC55/paid_campaigns",
"img" : null,
"email" : "[email protected]",
"metadata" : {},
"id" : "USRC55",
"uri" : "/v1/users/USRC55",
"creation_date" : "2012-10-31T00:41:55Z",
"campaigns_uri" : "/v1/users/USRC55/campaigns",
"last_login_date" : "2012-10-30T17:41:55.834029000Z",
"lastname" : null,
"payments_uri" : "/v1/users/USRC55/payments",
"is_verified" : 0
},
"is_expired" : 0,
"fixed_payment_amount" : 0,
"tilt_amount" : 300000,
"description" : "This will be the best thing ever!",
"uri" : "/v1/campaigns/CMP542",
"creation_date" : "2012-11-01T13:40:10.153237000Z",
"user_id" : "USRC55",
"title" : "Halloween Awesome Fest",
"payments_uri" : "/v1/campaigns/CMP542/payments",
"modification_date" : "2012-11-01T13:40:10.153237000Z",
"stats" : {
"tilt_percent" : 0,
"raised_amount" : 0,
"unique_contributors" : 0,
"number_of_contributions" : 0
},
"expiration_date" : "2012-10-31T12:00:00Z",
"is_tilted" : 0,
"tax_id" : null,
"tax_name" : null
}
}
Now, we'll create a credit card for the paying user.
$ curl -X POST -u key:secret -H Content-Type:application/json \
https://api-sandbox.crowdtilt.com/v1/users/USRE32/cards \
-d'{
"card" : {
"number" : "4111111111111111",
"expiration_month" : "07",
"expiration_year" : "2032",
"security_code" : "123"
}
}'
# Response
{
"card" : {
"last_four" : "1111",
"expiration_year" : "2032",
"expiration_month" : "07",
"uri" : "/v1/users/USRE32/cards/CCPA69",
"card_type" : "VISA card",
"creation_date" : "2012-11-01T20:49:37Z",
"metadata" : {},
"id" : "CCPA69"
}
}
Now we'll create a payment by the paying user to the campaign we created.
$ curl -X POST -u key:secret -H Content-Type:application/json \
https://api-sandbox.crowdtilt.com/v1/campaings/CMP542/payments \
-d'{
"payment" : {
"user_id" : "USRE32",
"amount" : "2000",
"user_fee_amount" : "100",
"admin_fee_amount" : "200",
"card_id" : "CCPA69"
}
}'
# Response
{
"payment" : {
"status" : "authorized",
"user_fee_amount" : "100",
"campaign" : {
"img" : null,
"tilter" : null,
"min_payment_amount" : 0,
"first_contributor" : {
"firstname" : "",
"paid_campaigns_uri" : "/v1/users/USRE32/paid_campaigns",
"img" : null,
"email" : "[email protected]",
"metadata" : {},
"id" : "USRE32",
"uri" : "/v1/users/USRE32",
"creation_date" : "2012-11-01T20:56:19Z",
"campaigns_uri" : "/v1/users/USRE32/campaigns",
"last_login_date" : "2012-11-01T13:56:19.964087000Z",
"lastname" : "",
"payments_uri" : "/v1/users/USRE32/payments",
"is_verified" : 0
},
"metadata" : {},
"id" : "CMP542",
"is_paid" : 0,
"settlements_uri" : "/v1/campaigns/CMP542",
"privacy" : 1,
"admin" : {
"firstname" : "",
"paid_campaigns_uri" : "/v1/users/USRC55/paid_campaigns",
"img" : null,
"email" : "[email protected]",
"metadata" : {},
"id" : "USRC55",
"uri" : "/v1/users/USRC55",
"creation_date" : "2012-10-31T00:41:55Z",
"campaigns_uri" : "/v1/users/USRC55/campaigns",
"last_login_date" : "2012-10-30T17:41:55.834029000Z",
"lastname" : "",
"payments_uri" : "/v1/users/USRC55/payments",
"is_verified" : 0
},
"is_expired" : 1,
"fixed_payment_amount" : 0,
"tilt_amount" : 300000,
"description" : "This will be the best thing ever!",
"uri" : "/v1/campaigns/CMP542",
"creation_date" : "2012-11-01T13:40:10.153237000Z",
"title" : "Halloween Awesome Fest",
"payments_uri" : "/v1/campaigns/CMP5422B558246411E281ED84A52A776874/payments",
"modification_date" : "2012-11-01T13:40:10.153237000Z",
"stats" : {
"tilt_percent" : 2,
"raised_amount" : 6000,
"unique_contributors" : 1,
"number_of_contributions" : 3
},
"expiration_date" : "2012-10-31T12:00:00Z",
"is_tilted" : 0,
"tax_id" : null,
"tax_name" : null
},
"user" : {
"firstname" : "",
"paid_campaigns_uri" : "/v1/users/USR962FB8E0246611E2AEDE84A52A776874/paid_campaigns",
"img" : null,
"email" : "[email protected]",
"metadata" : {},
"id" : "USRE32",
"uri" : "/v1/users/USRE32",
"creation_date" : "2012-11-01T20:56:19Z",
"campaigns_uri" : "/v1/users/USRE32/campaigns",
"last_login_date" : "2012-11-01T13:56:19.964087000Z",
"lastname" : "",
"payments_uri" : "/v1/users/USRE32/payments",
"is_verified" : 0
},
"metadata" : {},
"id" : "CON036",
"uri" : "/v1/campaigns/CMP542/payments/CON036",
"card" : {
"last_four" : "1111",
"metadata" : {},
"id" : "CCPA69",
"expiration_year" : 2032,
"expiration_month" : "07",
"uri" : "/v1/users/USRE32/cards/CCPA69",
"card_type" : "VISA card",
"creation_date" : "2012-11-01T20:57:20Z"
},
"amount" : "2000",
"admin_fee_amount" : "200",
}
}
This payment will charge $21.00
to the user's credit card ($20.00
from the
amount
field, plus $1.00
from the user_fee_amount
field), and the admin of
the campaign will receive $18.00
from the payment ($20.00
from amount
minus the $2.00
set in the admin_fee_amount
field).
Now you have created 2 users, a campaign under one user, and a payment to the campaign by another user!
This section outlines the full definition of our resources.
Attribute | Type | Required | Description |
---|---|---|---|
id | string | Auto generated and read-only | A unique identifier for the user |
string | Yes | Email address | |
firstname | string | Yes | The first name of the user |
lastname | string | Yes | The last name of the user |
is_verified | integer | Auto generated and read-only | Whether this user is verified to receive money |
img | string | No | A url for user's image |
creation_date | string | Auto generated and read-only | It is ISO8601 DateTime format |
last_login_date | string | Auto generated and read-only | It is ISO8601 DateTime format, updated when a user is authenticated. |
metadata | JSON object | No | Key-Value pair for any extra data the API consumer wants to store. |
uri | string | Auto generated and read-only | The uri for this user resource |
campaigns_uri | string | Auto generated and read-only | The uri for listing user's campaigns |
paid_campaigns_uri | string | Auto generated and read-only | The uri for listing the campaigns the user paid for |
payments_uri | string | Auto generated and read-only | The uri for the user's payments |
Attribute | Type | Required | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
id | string | Auto generated and read-only | A unique identifier for the campaign | ||||||
user_id | string | Yes | The id of the campaign admin | ||||||
title | string | Yes | The title of the campaign | ||||||
description | string | Yes | The description of the campaign | ||||||
img | string | No | A URI to an image to be used for the campaign | ||||||
is_expired | number | No | Whether or not the campaign is expired
|
||||||
privacy | number | No | The privacy settings for the campaign. It defaults to 1.
Available values
|
||||||
tilt_amount | number | Yes | The amount required to tilt the campaign. This amount is in cents. After the campaign raises enough funds equal or more than this amount, the credit cards will get charged. Before that, cards are authorized only. | ||||||
min_payment_amount | number | No | The minimum amount for a single payment. This amount is in cents. | ||||||
fixed_payment_amount | number | No | If this amount is set, each payment will have to be exactly this amount or multiples of it. This amount is in cents. | ||||||
expiration_date | String. ISO8601 DateTime format | Yes | The expiration date of the campaign | ||||||
creation_date | String. ISO8601 DateTime format | Auto generated and read-only | The creation date of the campaign | ||||||
modification_date | String. ISO8601 DateTime format | Auto generated and read-only | The modification date of the campaign | ||||||
is_tilted | number | Read-only | Indicates whether or not the campaign has tilted | ||||||
is_paid | number | Read-only | Indicates whether or not the campaign funds has been paid to the admin | ||||||
type | number | No | The type of the campaign. Available values
|
||||||
tax_id | string | No | The EIN for a business or non-profit organization. This attribute is required only if the campaign type is a non-profit. | ||||||
tax_name | string | No | The name of the business or non-profit | ||||||
admin | JSON User object | Auto generated and read-only | This campaign's admin | ||||||
tilter | JSON User object | Auto generated and read-only | This campaign's tilter (if tilted) | ||||||
first_contributor | JSON User object | Auto generated and read-only | This campaign's first contributor | ||||||
uri | string | Auto generated and read-only | The uri for this campaign resource | ||||||
payments_uri | string | Auto generated and read-only | The uri for the payments on this campaign | ||||||
settlements_uri | string | Auto generated and read-only | The uri with the settlements for this campaign | ||||||
metadata | JSON object | No | Key-Value pair for any extra data the API consumer wants to store. | ||||||
stats | JSON object | No | Statistics information about the campaign. |
Attribute | Type | Required | Description | ||||
---|---|---|---|---|---|---|---|
id | string | Auto generated and read-only | A unique identifier for the payment | ||||
amount | number | Yes | The amount of this payment that will go towards the campaign | ||||
user_fee_amount | number | Yes | The amount to charge the user (payer) for this contribution. This amount will be *added* to the `amount` value when determining what will be charged to the users card. The full charge amount will be `amount` + `user_fee_amount`. | ||||
admin_fee_amount | number | Yes | The amount to charge the admin of the campaign for this contribution. This value does *not* affect the amount charged to the user, but instead affects how much of the `amount` value goes to the campaign admin. The admin will get `amount` - `admin_fee_amount` from this contribution when the campaign tilts and expires. | ||||
status | string | Auto generated and read-only | Reflects the status of the payment. Available values:
|
||||
creation_date | String. ISO8601 DateTime format | Auto generated and read-only | The creation date of the payment | ||||
modification_date | String. ISO8601 DateTime format | Auto generated and read-only | The modification date of the payment | ||||
uri | string | Auto generated and read-only | The uri for this campaign resource | ||||
user | JSON User object | Auto generated and read-only | The contributor of this payment | ||||
card | JSON Card object | Auto generated and read-only | The card used for this payment | ||||
campaign | JSON Campaign object | Auto generated and read-only | The campaign this payment is for | ||||
metadata | JSON object | No | Key-Value pair for any extra data the API consumer wants to store. |
Attribute | Type | Required | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | string | Auto generated and read-only | A unique identifier for the payment | ||||||||||||
admin_amount | number | Auto generated and read-only | The amount of this payment that is going to the admin bank account (the bank account shown in the `bank` sub-object). | ||||||||||||
escrow_amount | number | Auto generated and read-only | The amount of this payment that is going into the API Users escrow account. | ||||||||||||
status | string | Auto generated and read-only | Reflects the status of the settlement. Available values:
|
||||||||||||
creation_date | String. ISO8601 DateTime format | Auto generated and read-only | The creation date of the settlement | ||||||||||||
modification_date | String. ISO8601 DateTime format | Auto generated and read-only | The modification date of the settlement | ||||||||||||
uri | string | Auto generated and read-only | The uri for this settlement | ||||||||||||
user | JSON User object | Auto generated and read-only | The user who received this settlement | ||||||||||||
bank | JSON Bank object | Auto generated and read-only | The bank account that received this settlement | ||||||||||||
campaign | JSON Campaign object | Auto generated and read-only | The campaign this payment is for | ||||||||||||
metadata | JSON object | No | Key-Value pair for any extra data the API consumer wants to store. |
All GET
requests on collection resources has pagination enabled with a default
of 50 entries per page. For example:
GET /users
{
"pagination": {
"total_pages": 2,
"page": 1,
"total_entries": 100,
"per_page": 50
},
"users": [
{
"id": "USREC5",
"email": "[email protected]",
"firstname": "Foo",
"lastname": "Bar",
"img": "https://example.com/profile.png",
"is_verified": 1,
"creation_date": "2011-07-02T14:20:48Z",
"last_login_date": "2012-09-22T01:55:49Z",
"uri": "/v1/users/USREC5",
"campaigns_uri": "/v1/users/USREC5/campaigns",
"paid_campaigns_uri": "/v1/users/USREC5/paid_campaigns",
"payments_uri": "/v1/users/USREC5/payments",
"metadata": {}
},
.
.
.
]
}
The default limits can be changed with per_page
and page
request
parameters. For example:
GET /users?page=2&per_page=10