A RESTful API for payment service management.
http://localhost:8000
The API uses two types of authentication:
- Partner Authentication: Required for partner-specific operations
- Header:
Authorization: Bearer <partner_token>
- Header:
X-Partner-ID: <partner_id>
- Header:
POST /partners
Headers:
X-Admin-API-Key
: Required
Request Body:
{
"name": "string",
"email": "string",
"username": "string",
"password": "string",
"phone": "string (optional)",
"account": "string"
}
Response: 201 Created
{
"id": "string",
"name": "string",
"email": "string",
"username": "string",
"phone": "string",
"is_active": boolean,
"created_at": "datetime",
"updated_at": "datetime"
}
GET /partners
Headers:
X-Admin-API-Key
: Required
Query Parameters:
skip
: integer (default: 0)limit
: integer (default: 100, max: 100)
Response: 200 OK
[
{
"id": "string",
"name": "string",
"email": "string",
"username": "string",
"phone": "string",
"is_active": boolean,
"created_at": "datetime",
"updated_at": "datetime"
}
]
GET /partners/{partner_id}
Headers:
X-Admin-API-Key
: Required
Response: 200 OK
{
"id": "string",
"name": "string",
"email": "string",
"username": "string",
"phone": "string",
"is_active": boolean,
"created_at": "datetime",
"updated_at": "datetime"
}
PATCH /partners/{partner_id}
Headers:
X-Admin-API-Key
: Required
Request Body:
{
"name": "string (optional)",
"email": "string (optional)",
"phone": "string (optional)",
"password": "string (optional)",
"is_active": boolean (optional)
}
Response: 200 OK
{
"id": "string",
"name": "string",
"email": "string",
"username": "string",
"phone": "string",
"is_active": boolean,
"created_at": "datetime",
"updated_at": "datetime"
}
DELETE /partners/{partner_id}
Headers:
X-Admin-API-Key
: Required
Response: 204 No Content
POST /users
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Request Body:
{
"username": "string",
"email": "string",
"password": "string",
"is_admin": boolean
}
Response: 201 Created
{
"id": "string",
"username": "string",
"email": "string",
"is_admin": boolean,
"is_active": boolean,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
GET /users
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Query Parameters:
skip
: integer (default: 0)limit
: integer (default: 100, max: 100)
Response: 200 OK
[
{
"id": "string",
"username": "string",
"email": "string",
"is_admin": boolean,
"is_active": boolean,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
]
GET /users/{user_id}
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Response: 200 OK
{
"id": "string",
"username": "string",
"email": "string",
"is_admin": boolean,
"is_active": boolean,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
PATCH /users/{user_id}
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Request Body:
{
"username": "string (optional)",
"email": "string (optional)",
"password": "string (optional)",
"is_active": boolean (optional),
"is_admin": boolean (optional)
}
Response: 200 OK
{
"id": "string",
"username": "string",
"email": "string",
"is_admin": boolean,
"is_active": boolean,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
DELETE /users/{user_id}
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Response: 204 No Content
POST /shoppers
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Request Body:
{
"name": "string",
"email": "string",
"phone": "string (optional)",
"account": "string"
}
Response: 201 Created
{
"id": "string",
"name": "string",
"email": "string",
"phone": "string",
"account": "string",
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime",
"total_completed_charges": {
"currency": "decimal"
}
}
GET /shoppers
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Query Parameters:
skip
: integer (default: 0)limit
: integer (default: 100, max: 100)
Response: 200 OK
[
{
"id": "string",
"name": "string",
"email": "string",
"phone": "string",
"account": "string",
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime",
"total_completed_charges": {
"currency": "decimal"
}
}
]
GET /shoppers/{shopper_id}
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Response: 200 OK
{
"id": "string",
"name": "string",
"email": "string",
"phone": "string",
"account": "string",
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime",
"total_completed_charges": {
"currency": "decimal"
}
}
GET /shoppers/{shopper_id}/charges
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Query Parameters:
skip
: integer (default: 0)limit
: integer (default: 100, max: 100)
Response: 200 OK
[
{
"id": "string",
"amount": "decimal",
"currency": "string",
"status": "string",
"description": "string",
"charge_metadata": object,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
]
POST /charges
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Request Body:
{
"amount": "decimal",
"currency": "string",
"description": "string",
"charge_metadata": object,
"shopper_id": "string (optional)"
}
Response: 201 Created
{
"id": "string",
"amount": "decimal",
"currency": "string",
"status": "string",
"description": "string",
"charge_metadata": object,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
PATCH /charges/{charge_id}
Headers:
X-Admin-API-Key
: Required
Request Body:
{
"amount": "decimal (optional)",
"currency": "string (optional)",
"status": "string (optional)",
"description": "string (optional)",
"charge_metadata": object (optional)
}
Response: 200 OK
{
"id": "string",
"amount": "decimal",
"currency": "string",
"status": "string",
"description": "string",
"charge_metadata": object,
"partner_id": "string",
"created_at": "datetime",
"updated_at": "datetime"
}
GET /charges/{charge_id}/history
Headers:
Authorization
: Bearer tokenX-Partner-ID
: Partner ID
Query Parameters:
skip
: integer (default: 0)limit
: integer (default: 100, max: 100)
Response: 200 OK
[
{
"id": "string",
"charge_id": "string",
"status": "string",
"previous_status": "string",
"description": "string",
"created_at": "datetime"
}
]
POST /webhook/line
Request Body:
{
"destination": "string",
"events": [
{
"type": "string",
"message": {
"type": "string",
"id": "string",
"contentProvider": {
"type": "string"
},
"content": {
"type": "string"
}
},
"timestamp": "integer",
"source": {
"type": "string",
"userId": "string"
},
"replyToken": "string",
"mode": "string",
"deliveryContext": {
"isRedelivery": boolean
}
}
]
}
Response: 200 OK
200 OK
: Request successful201 Created
: Resource created successfully204 No Content
: Request successful, no content to return400 Bad Request
: Invalid request parameters401 Unauthorized
: Invalid or missing authentication404 Not Found
: Resource not found409 Conflict
: Resource already exists or conflict with existing data500 Internal Server Error
: Server error
The following ISO 4217 currency codes are supported:
- USD (US Dollar)
- EUR (Euro)
- GBP (British Pound)
- JPY (Japanese Yen)
- AUD (Australian Dollar)
- CAD (Canadian Dollar)
- CHF (Swiss Franc)
- CNY (Chinese Yuan)
- INR (Indian Rupee)
- NZD (New Zealand Dollar)
- BRL (Brazilian Real)
- RUB (Russian Ruble)
- KRW (South Korean Won)
- SGD (Singapore Dollar)
- HKD (Hong Kong Dollar)
- SEK (Swedish Krona)
- NOK (Norwegian Krone)
- MXN (Mexican Peso)
- ZAR (South African Rand)
- TRY (Turkish Lira)
- THB (Thai Baht)
The following charge statuses are supported:
pending
: Initial state when charge is createdprocessing
: Charge is being processedcompleted
: Charge has been successfully completedfailed
: Charge processing failedcancelled
: Charge was cancelledrefunded
: Charge was refunded