PayUp Merchant Admin API (1.0.0)
Download OpenAPI specification:Download
Administrative API used by the PayUp merchant dashboard. All routes live
under /api/merchant/v1.
Except for the explicitly public endpoints (register, login, currency
reads/conversion, and gateway request webhooks), every endpoint requires a
merchant JWT passed as Authorization: Bearer <jwt>. Obtain the JWT from
POST /auth/login or POST /auth/register.
Register a merchant user
Request Body schema: application/json
| email required | string <email> |
| password required | string >= 8 characters |
| name required | string non-empty |
| company | string |
Responses
Request samples
- Payload
Content type
application/json
{- "email": "user@example.com",
- "password": "stringst",
- "name": "string",
- "company": "string"
}Response samples
- 201
- 400
Content type
application/json
{- "user": {
- "id": "string",
- "email": "user@example.com",
- "name": "string",
- "companyName": "string",
- "isActive": true,
- "paymentMode": "string",
- "settings": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "token": "string"
}Log in
Request Body schema: application/json
| email required | string <email> |
| password required | string |
Responses
Request samples
- Payload
Content type
application/json
{- "email": "user@example.com",
- "password": "string"
}Response samples
- 200
- 401
Content type
application/json
{- "user": {
- "id": "string",
- "email": "user@example.com",
- "name": "string",
- "companyName": "string",
- "isActive": true,
- "paymentMode": "string",
- "settings": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "token": "string"
}Response samples
- 200
- 401
Content type
application/json
{- "id": "string",
- "email": "user@example.com",
- "name": "string",
- "companyName": "string",
- "isActive": true,
- "paymentMode": "string",
- "settings": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Update the current user profile
Authorizations:
MerchantJwt
Request Body schema: application/json
| name | string |
| companyName | string |
object |
Responses
Request samples
- Payload
Content type
application/json
{- "name": "string",
- "companyName": "string",
- "settings": { }
}Response samples
- 200
Content type
application/json
{- "id": "string",
- "email": "user@example.com",
- "name": "string",
- "companyName": "string",
- "isActive": true,
- "paymentMode": "string",
- "settings": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Response samples
- 200
- 401
Content type
application/json
{- "user": {
- "id": "string",
- "email": "user@example.com",
- "name": "string",
- "companyName": "string",
- "isActive": true,
- "paymentMode": "string",
- "settings": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "token": "string"
}Response samples
- 200
Content type
application/json
[- {
- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true,
- "id": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Create an app
Authorizations:
MerchantJwt
Request Body schema: application/json
| name required | string |
| description | string |
| webhookUrl | string or null <uri> |
| brandName | string |
| brandLogo | string or null <uri> |
| showProducts | boolean |
| showCurrencySelector | boolean |
| showTaxElement | boolean |
| showCustomerElement | boolean |
| showAddressElement | boolean |
| showShipping | boolean |
| showPayment | boolean |
Responses
Request samples
- Payload
Content type
application/json
{- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true
}Response samples
- 201
- 400
Content type
application/json
{- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true,
- "id": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Response samples
- 200
- 404
Content type
application/json
{- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true,
- "id": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Update an app
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
Request Body schema: application/json
| name required | string |
| description | string |
| webhookUrl | string or null <uri> |
| brandName | string |
| brandLogo | string or null <uri> |
| showProducts | boolean |
| showCurrencySelector | boolean |
| showTaxElement | boolean |
| showCustomerElement | boolean |
| showAddressElement | boolean |
| showShipping | boolean |
| showPayment | boolean |
Responses
Request samples
- Payload
Content type
application/json
{- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true
}Response samples
- 200
Content type
application/json
{- "name": "string",
- "description": "string",
- "brandName": "string",
- "showProducts": true,
- "showCurrencySelector": true,
- "showTaxElement": true,
- "showCustomerElement": true,
- "showAddressElement": true,
- "showShipping": true,
- "showPayment": true,
- "id": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}List masked API keys for an app
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
Responses
Response samples
- 200
Content type
application/json
[- {
- "environment": "sandbox",
- "publicKey": "string",
- "secretKeyMasked": "sk_live_...a1b2",
- "status": "active",
- "lastUsedAt": "2019-08-24T14:15:22Z",
- "lastRotatedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
]Rotate the key pair for an environment
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
| environment required | string (Environment) Enum: "sandbox" "live" |
Responses
Response samples
- 200
Content type
application/json
{- "message": "string",
- "environment": "sandbox",
- "publicKey": "string",
- "secretKey": "string",
- "secretKeyPrefix": "string",
- "secretKeyLast4": "string"
}Create a product
Authorizations:
MerchantJwt
Request Body schema: application/json
| appId required | string |
| title required | string |
| price required | number > 0 |
| sku | string |
| currency | string |
| description | string |
| media | Array of strings |
| category | string |
| compareAtPrice | number |
| unitPrice | number |
| chargeTax | boolean |
| costPerItem | number |
| status | string Enum: "active" "draft" "archived" |
| quantity | integer |
object | |
object | |
Array of objects | |
object |
Responses
Request samples
- Payload
Content type
application/json
{- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { }
}Response samples
- 201
- 400
Content type
application/json
{- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { },
- "id": "string",
- "storeCode": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Response samples
- 200
Content type
application/json
[- {
- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { },
- "id": "string",
- "storeCode": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Response samples
- 200
- 404
Content type
application/json
{- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { },
- "id": "string",
- "storeCode": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Update a product
Authorizations:
MerchantJwt
path Parameters
| productId required | string |
Request Body schema: application/json
| appId required | string |
| title required | string |
| price required | number > 0 |
| sku | string |
| currency | string |
| description | string |
| media | Array of strings |
| category | string |
| compareAtPrice | number |
| unitPrice | number |
| chargeTax | boolean |
| costPerItem | number |
| status | string Enum: "active" "draft" "archived" |
| quantity | integer |
object | |
object | |
Array of objects | |
object |
Responses
Request samples
- Payload
Content type
application/json
{- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { }
}Response samples
- 200
Content type
application/json
{- "appId": "string",
- "title": "string",
- "price": 0,
- "sku": "string",
- "currency": "string",
- "description": "string",
- "media": [
- "string"
], - "category": "string",
- "compareAtPrice": 0,
- "unitPrice": 0,
- "chargeTax": true,
- "costPerItem": 0,
- "status": "active",
- "quantity": 0,
- "inventory": { },
- "shipping": { },
- "variants": [
- { }
], - "seo": { },
- "id": "string",
- "storeCode": "string",
- "userId": "string",
- "isActive": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}List payment sessions
Authorizations:
MerchantJwt
query Parameters
| page | integer Default: 1 |
| limit | integer Default: 50 |
Responses
Response samples
- 200
Content type
application/json
{- "sessions": [
- {
- "id": "string",
- "sessionId": "string",
- "amount": 0,
- "currency": "string",
- "customerEmail": "string",
- "customerName": "string",
- "products": [
- {
- "sku": "string",
- "title": "string",
- "price": 0,
- "currency": "string",
- "quantity": 0,
- "productId": "string",
- "sessionPrice": 0
}
], - "status": "string",
- "gateway": "string",
- "description": "string",
- "redirectUrl": "string",
- "expiresAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z",
- "cancelledAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "page": 0,
- "limit": 0,
- "total": 0,
- "pages": 0
}
}Get payment session details
Authorizations:
MerchantJwt
path Parameters
| sessionId required | string |
Responses
Response samples
- 200
- 404
Content type
application/json
{- "id": "string",
- "sessionId": "string",
- "amount": 0,
- "currency": "string",
- "customerEmail": "string",
- "customerName": "string",
- "products": [
- {
- "sku": "string",
- "title": "string",
- "price": 0,
- "currency": "string",
- "quantity": 0,
- "productId": "string",
- "sessionPrice": 0
}
], - "status": "string",
- "gateway": "string",
- "description": "string",
- "redirectUrl": "string",
- "expiresAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z",
- "cancelledAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "returnUrl": "string",
- "cancelUrl": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "providerPaymentId": "string",
- "gatewayTransactionId": "string",
- "error": { }
}Create a customer
Authorizations:
MerchantJwt
Request Body schema: application/json
| appId required | string |
| firstName | string |
| lastName | string |
string <email> | |
| mobile | string |
| language | string |
object | |
object | |
| notes | string |
| tags | Array of strings |
Responses
Request samples
- Payload
Content type
application/json
{- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
]
}Response samples
- 201
Content type
application/json
{- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
], - "id": "string",
- "userId": "string",
- "sessionIds": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Response samples
- 200
Content type
application/json
[- {
- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
], - "id": "string",
- "userId": "string",
- "sessionIds": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Response samples
- 200
- 404
Content type
application/json
{- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
], - "id": "string",
- "userId": "string",
- "sessionIds": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Update a customer
Authorizations:
MerchantJwt
path Parameters
| customerId required | string |
Request Body schema: application/json
| appId required | string |
| firstName | string |
| lastName | string |
string <email> | |
| mobile | string |
| language | string |
object | |
object | |
| notes | string |
| tags | Array of strings |
Responses
Request samples
- Payload
Content type
application/json
{- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
]
}Response samples
- 200
Content type
application/json
{- "appId": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "mobile": "string",
- "language": "string",
- "defaultAddress": { },
- "marketingPreferences": { },
- "notes": "string",
- "tags": [
- "string"
], - "id": "string",
- "userId": "string",
- "sessionIds": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}List an app's configured gateways
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
Responses
Response samples
- 200
Content type
application/json
{- "gateways": [
- {
- "id": "string",
- "appId": "string",
- "name": "string",
- "config": { },
- "defaultCurrency": "string",
- "acceptedCurrencies": [
- "string"
], - "isDefault": true,
- "isActive": true
}
]
}Configure a gateway for an app
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
Request Body schema: application/json
| name required | string Enum: "paypal" "stripe" "moyasar" "myfatoorah" |
required | object |
| defaultCurrency | string = 3 characters |
| acceptedCurrencies | Array of strings |
| isDefault | boolean Default: false |
Responses
Request samples
- Payload
Content type
application/json
{- "name": "paypal",
- "config": { },
- "defaultCurrency": "str",
- "acceptedCurrencies": [
- "string"
], - "isDefault": false
}Response samples
- 201
Content type
application/json
{- "id": "string",
- "appId": "string",
- "name": "string",
- "config": { },
- "defaultCurrency": "string",
- "acceptedCurrencies": [
- "string"
], - "isDefault": true,
- "isActive": true
}Update an app gateway
Authorizations:
MerchantJwt
path Parameters
| appId required | string |
| gatewayId required | string |
Request Body schema: application/json
| property name* additional property | any |
Responses
Request samples
- Payload
Content type
application/json
{ }Response samples
- 200
Content type
application/json
{- "id": "string",
- "appId": "string",
- "name": "string",
- "config": { },
- "defaultCurrency": "string",
- "acceptedCurrencies": [
- "string"
], - "isDefault": true,
- "isActive": true
}Create a gateway onboarding request
Authorizations:
MerchantJwt
Request Body schema: application/json
| gateway required | string |
object | |
object | |
| website | string |
object | |
Array of objects |
Responses
Request samples
- Payload
Content type
application/json
{- "gateway": "string",
- "customer": { },
- "company": { },
- "website": "string",
- "gatewayExtra": { },
- "attachments": [
- { }
]
}Response samples
- 201
Content type
application/json
{ }Update request status (admin only)
Authorizations:
MerchantJwt
path Parameters
| id required | string |
Request Body schema: application/json
| status | string |
Responses
Request samples
- Payload
Content type
application/json
{- "status": "string"
}Response samples
- 403
Content type
application/json
{- "error": "string",
- "message": "string"
}Add corrections to a request (admin only)
Authorizations:
MerchantJwt
path Parameters
| id required | string |
Request Body schema: application/json
| property name* additional property | any |
Responses
Request samples
- Payload
Content type
application/json
{ }Response samples
- 403
Content type
application/json
{- "error": "string",
- "message": "string"
}Create a gateway routing rule
Authorizations:
MerchantJwt
Request Body schema: application/json
| appId required | string |
| name required | string |
| ruleType required | string |
required | Array of objects |
| preferredGateway required | string |
| environment required | string (Environment) Enum: "sandbox" "live" |
Responses
Request samples
- Payload
Content type
application/json
{- "appId": "string",
- "name": "string",
- "ruleType": "string",
- "conditions": [
- { }
], - "preferredGateway": "string",
- "environment": "sandbox"
}Response samples
- 201
Content type
application/json
{- "success": true,
- "data": null,
- "message": "string",
- "error": "string"
}Update a gateway rule
Authorizations:
MerchantJwt
path Parameters
| id required | string |
Request Body schema: application/json
| property name* additional property | any |
Responses
Request samples
- Payload
Content type
application/json
{ }Response samples
- 200
Content type
application/json
{- "success": true,
- "data": null,
- "message": "string",
- "error": "string"
}Test gateway rule matching
Authorizations:
MerchantJwt
Request Body schema: application/json
| property name* additional property | any |
Responses
Request samples
- Payload
Content type
application/json
{ }Response samples
- 200
Content type
application/json
{- "success": true,
- "data": null,
- "message": "string",
- "error": "string"
}Provider webhook for gateway request status
path Parameters
| provider required | string Enum: "stripe" "paypal" "moyasar" "myfatoorah" |
Request Body schema: application/json
| externalId required | string |
| status required | string Enum: "approved" "rejected" "pending" "live" |
| encryptedSecrets | string |
Responses
Request samples
- Payload
Content type
application/json
{- "externalId": "string",
- "status": "approved",
- "encryptedSecrets": "string"
}Response samples
- 200
Content type
application/json
{- "success": true,
- "request": { }
}Create a currency
Authorizations:
MerchantJwt
Request Body schema: application/json
| code | string |
| name | string |
| symbol | string |
Responses
Request samples
- Payload
Content type
application/json
{- "code": "USD",
- "name": "string",
- "symbol": "string"
}Response samples
- 201
Content type
application/json
{- "code": "USD",
- "name": "string",
- "symbol": "string"
}Update a currency
Authorizations:
MerchantJwt
path Parameters
| code required | string Example: USD |
Request Body schema: application/json
| code | string |
| name | string |
| symbol | string |
Responses
Request samples
- Payload
Content type
application/json
{- "code": "USD",
- "name": "string",
- "symbol": "string"
}Response samples
- 200
Content type
application/json
{- "code": "USD",
- "name": "string",
- "symbol": "string"
}Create a library
Authorizations:
MerchantJwt
Request Body schema: application/json
| id | string |
| identifier | string |
| name | string |
| description | string |
| scopes | Array of strings |
| modules | Array of strings |
| isActive | boolean |
Responses
Request samples
- Payload
Content type
application/json
{- "id": "string",
- "identifier": "string",
- "name": "string",
- "description": "string",
- "scopes": [
- "string"
], - "modules": [
- "string"
], - "isActive": true
}Response samples
- 201
Content type
application/json
{- "id": "string",
- "identifier": "string",
- "name": "string",
- "description": "string",
- "scopes": [
- "string"
], - "modules": [
- "string"
], - "isActive": true
}Update a library
Authorizations:
MerchantJwt
path Parameters
| libraryId required | string |
Request Body schema: application/json
| id | string |
| identifier | string |
| name | string |
| description | string |
| scopes | Array of strings |
| modules | Array of strings |
| isActive | boolean |
Responses
Request samples
- Payload
Content type
application/json
{- "id": "string",
- "identifier": "string",
- "name": "string",
- "description": "string",
- "scopes": [
- "string"
], - "modules": [
- "string"
], - "isActive": true
}Response samples
- 200
Content type
application/json
{- "id": "string",
- "identifier": "string",
- "name": "string",
- "description": "string",
- "scopes": [
- "string"
], - "modules": [
- "string"
], - "isActive": true
}Upload a media file
Authorizations:
MerchantJwt
Request Body schema: multipart/form-data
| file required | string <binary> |
| appId required | string |
Responses
Response samples
- 201
Content type
application/json
{- "id": "string",
- "appId": "string",
- "url": "string",
- "type": "string",
- "fileName": "string",
- "size": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}