The Dime Partner API lets you take payments, bill customers, and onboard sub-merchants. It is organised around REST, uses predictable resource-oriented URLs, accepts JSON request bodies, and returns JSON responses.
Current version: v2. All new integrations should use it. v1 remains available and supported, but will be deprecated.
https://sandbox.api.dimepay.app/dapi/v2Every production account can enable sandbox mode, so these docs target sandbox throughout. Swap the host for production once your integration is ready.
Send your client key in the client_key header on every request:
curl https://sandbox.api.dimepay.app/dapi/v2/invoices \
-H "client_key: ck_your_sandbox_key"Your key carries privileges — keep it out of source control, client-side code, and anywhere it could be read by a third party.
Requests without a valid key return 401.
Every resource carries a prefixed id, so an identifier is recognisable on sight:
| Prefix | Resource |
|---|---|
ord_ | Order |
inv_ | Invoice |
txn_ | Transaction |
lnk_ | Payment link |
crq_ | Card request |
cus_ | Customer |
str_ | Store |
Orders and card requests also carry a shorter public token, used in hosted page URLs. Either form works when retrieving a resource.
An id without its prefix is rejected with 400, rather than silently returning nothing.
Send plain JSON. Resources come back at the top level, with no wrapper:
{
"id": "ord_30800d0f-da91-4c38-9ec2-1016c27f8209",
"object": "order",
"status": "PENDING",
"currency": "JMD",
"total": 1100
}Every resource carries an object field naming its type, so a response is self-describing.
Dime uses conventional HTTP status codes: 2xx for success, 4xx for a problem with the request, 5xx for a problem on our side.
Failures return a single error object:
{
"error": {
"type": "invalid_request_error",
"code": "parameter_missing",
"message": "Order ID is required.",
"param": "id"
}
}type is always one of four values:
| Type | Meaning |
|---|---|
invalid_request_error | The request was malformed or a parameter was rejected |
card_error | The card was declined or failed verification |
idempotency_error | An idempotency key was reused with different parameters |
api_error | Something went wrong on Dime's side |
param names the offending field where one applies, so an error can be surfaced against the right input in your UI.
A record belonging to another merchant returns 404, identical to one that never existed. The response cannot be used to discover which ids are real.
List endpoints are cursor-paginated. They return an envelope:
{
"object": "list",
"data": [ ... ],
"has_more": true
}There is no total count. has_more tells you whether another page exists.
| Parameter | Description |
|---|---|
limit | How many records to return, 1–100. Defaults to 10. |
starting_after | Return records after this id — walk forward |
ending_before | Return records before this id — walk backward |
To page forward, pass the last id you received as starting_after:
curl "https://sandbox.api.dimepay.app/dapi/v2/invoices?limit=25&starting_after=inv_ae1752f7-36b8-4ab3-bc0b-129eda89cc34" \
-H "client_key: ck_your_sandbox_key"Supplying both starting_after and ending_before is rejected.
Amounts are expressed in the currency's major unit — 1100 in JMD is 1,100 Jamaican dollars, not 11.00.
Supported currencies: USD, JMD, GBP, EUR, TTD, BBD, XCD, GYD, SRD.
Orders enforce a minimum: 200 JMD or 1 USD. Other currencies have no configured minimum.
| Resource | Use it to |
|---|---|
| Orders | Take a payment through a hosted checkout page |
| Invoices | Bill a customer for goods or services |
| Payment Links | Share a URL that collects a payment |
| Card Requests | Capture and store a customer's card |
| Payments | Charge a stored card, then capture, void, or refund |
| Transactions | Read the record of money moving |
| Subscriptions | Manage recurring billing |
If you have an existing v1 integration, three things differ:
Plain JSON. v1 signs the request body as a JWT and wraps it in a data field. v2 takes the body directly — sending data is rejected.
No envelope. v1 returns { statusCode, headers, body } with the payload nested under body.response. v2 returns the resource at the top level.
One error shape. v1 returns validation failures as an array of message strings. v2 returns a single error object with a machine-readable code and the offending param.