NewIntegration and go-live readiness, rebuiltSee what's new
marupay

A small API you can finish in a sprint.

Create a payment, send the user to its payment screen and credit the order when a signed event arrives. The full reference is available to approved merchant accounts.

Endpoints

MethodPathWhat it does
POST/v1/paymentsCreate a payment and get its payment screen URL
GET/v1/payments/{id}Retrieve a payment and its current status
GET/v1/paymentsList payments, filtered by status, date or order ID
POST/v1/events/{id}/redeliverSend a webhook event again

Ship it with one API call and one webhook.

Create a payment from your server, send the user to the payment screen it returns, and credit the order when a signed payment.completed event arrives. Voucher handling, receipt confirmation and retries stay on our side.

One payment, from request to settlement record

Hover to pause · select a step

pay_6nHs4ZpC8q
₩55,000pending
01Create payment13:57:21.408
request201 Created
POST /v1/payments
Idempotency-Key: ORD-58211-1
{
"orderId": "ORD-58211",
"customerId": "u_2210",
"amount": 55000,
"currency": "KRW",
"returnUrl": "https://example.com/orders/ORD-58211"
}
201Created· 38ms
{ "id": "pay_6nHs4ZpC8q", "status": "pending",
"payUrl": "https://pay.marupay.app/p/6nHs4ZpC8q" }

What your team builds

  1. A server call that creates a payment

    POST /v1/payments

    The response carries the payment screen URL. Send your user there, and they come back to your service when they're done.

  2. A webhook endpoint that credits the order

    payment.completed

    When a payment completes, a signed event arrives. Verify it, then complete the purchase on your side.

Receipt confirmation, matching, retries and settlement records run on MaruPay.

Explore the API

The full reference is available to approved merchant accounts.

create-payment.sh

curl https://api.marupay.app/v1/payments \
  -H "Authorization: Bearer mp_live_••••••••" \
  -H "Idempotency-Key: ORD-58202-1" \
  -H "Content-Type: application/json" \
  -d '{
    "orderId": "ORD-58202",
    "customerId": "u_6624",
    "amount": 49500,
    "currency": "KRW",
    "returnUrl": "https://example.com/orders/ORD-58202"
  }'
 
HTTP/1.1 201 Created
{
  "data": {
    "id": "pay_2MzV6hTf9w",
    "orderId": "ORD-58202",
    "amount": 49500,
    "currency": "KRW",
    "status": "pending",
    "payUrl": "https://pay.marupay.app/p/2MzV6hTf9w",
    "expiresAt": "2026-09-29T05:01:58Z"
  }
}

Conventions

Idempotency-Key

Required on create. The same key and body replays the original response.

Amounts

Integers in KRW. No decimals, no currency conversion.

Timestamps

ISO 8601 in UTC in the API; the console shows your time zone.

Keys

mp_test_ and mp_live_ keys, scoped to one merchant account.

Live payments open after the integration test.

You'll know your integration works before real money moves. The test runs your handler through completion, retries, duplicates and review cases, and live payments open once it passes.

Talk to sales
  1. Contact

    Tell us about your service and your Korean users.

  2. Review

    We confirm merchant conditions and set up your console account.

  3. Integrate

    Create payments, handle webhooks and verify signatures against the docs.

  4. Pass the integration test

    Run the required scenarios in test mode.

    • Completion
    • Retries
    • Duplicates
    • Review cases
  5. Go live

    Live payments open, and the console records every payment from the first one.

    Locked until the test passes

Get test keys.

Tell us about your service and we'll set up a test account for your team.