{
	"openapi": "3.1.0",
	"info": {
		"title": "FB User Betting API",
		"version": "1.0.0"
	},
	"servers": [
		{
			"url": "https://api.jd.io",
			"description": "Production"
		}
	],
	"components": {
		"securitySchemes": {
			"bearerAuth": {
				"type": "http",
				"scheme": "bearer",
				"description": "User API key"
			}
		},
		"schemas": {},
		"parameters": {}
	},
	"paths": {
		"/health": {
			"get": {
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"service": {
													"type": "string"
												},
												"status": {
													"type": "string"
												}
											},
											"required": [
												"service",
												"status"
											]
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/v1/account/balance": {
			"get": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"userId": {
													"type": "string"
												},
												"address": {
													"type": "string"
												},
												"funderAddress": {
													"type": "string"
												},
												"balanceBaseUnit": {
													"type": "string"
												},
												"allowanceBaseUnit": {
													"type": "string",
													"nullable": true
												},
												"balanceUsdc": {
													"type": "number"
												}
											},
											"required": [
												"userId",
												"address",
												"funderAddress",
												"balanceBaseUnit",
												"allowanceBaseUnit",
												"balanceUsdc"
											]
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/v1/positions": {
			"get": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"balanceUsdc": {
													"type": "number"
												},
												"portfolioValue": {
													"type": "number"
												},
												"totalPnl": {
													"type": "number"
												},
												"positions": {
													"type": "array",
													"items": {
														"type": "object",
														"properties": {
															"id": {
																"type": "string"
															},
															"conditionId": {
																"type": "string"
															},
															"marketTitle": {
																"type": "string"
															},
															"marketSlug": {
																"type": "string",
																"nullable": true
															},
															"iconUrl": {
																"type": "string",
																"nullable": true
															},
															"outcome": {
																"type": "string"
															},
															"shares": {
																"type": "number"
															},
															"avgPrice": {
																"type": "number"
															},
															"currentPrice": {
																"type": "number"
															},
															"value": {
																"type": "number"
															},
															"pnl": {
																"type": "number"
															},
															"pnlPercent": {
																"type": "number"
															},
															"negativeRisk": {
																"type": "boolean"
															},
															"redeemable": {
																"type": "boolean"
															}
														},
														"required": [
															"id",
															"conditionId",
															"marketTitle",
															"marketSlug",
															"iconUrl",
															"outcome",
															"shares",
															"avgPrice",
															"currentPrice",
															"value",
															"pnl",
															"pnlPercent",
															"negativeRisk",
															"redeemable"
														]
													}
												}
											},
											"required": [
												"balanceUsdc",
												"portfolioValue",
												"totalPnl",
												"positions"
											]
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/v1/orders": {
			"post": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"tokenId": {
										"type": "string",
										"minLength": 1
									},
									"action": {
										"type": "string",
										"enum": [
											"BUY",
											"SELL"
										]
									},
									"orderType": {
										"type": "string",
										"enum": [
											"market",
											"limit"
										]
									},
									"amount": {
										"type": "number",
										"minimum": 0,
										"exclusiveMinimum": true
									},
									"shares": {
										"type": "number",
										"minimum": 0,
										"exclusiveMinimum": true
									},
									"price": {
										"type": "number",
										"minimum": 0,
										"exclusiveMinimum": true,
										"maximum": 1,
										"exclusiveMaximum": true
									},
									"tickSize": {
										"type": "string",
										"minLength": 1
									},
									"idempotencyKey": {
										"type": "string",
										"minLength": 1,
										"maxLength": 128
									}
								},
								"required": [
									"tokenId",
									"action",
									"orderType"
								]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"idempotencyKey": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"idempotencyKey",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/v1/orders/open": {
			"get": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"parameters": [
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": false,
						"name": "id",
						"in": "query"
					},
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": false,
						"name": "market",
						"in": "query"
					},
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": false,
						"name": "assetId",
						"in": "query"
					},
					{
						"schema": {
							"type": "string",
							"enum": [
								"true",
								"false"
							]
						},
						"required": false,
						"name": "onlyFirstPage",
						"in": "query"
					},
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": false,
						"name": "nextCursor",
						"in": "query"
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"orders": {
													"type": "array",
													"items": {
														"type": "object",
														"properties": {
															"id": {
																"type": "string"
															},
															"marketId": {
																"type": "string"
															},
															"assetId": {
																"type": "string"
															},
															"marketTitle": {
																"type": "string",
																"nullable": true
															},
															"marketSlug": {
																"type": "string",
																"nullable": true
															},
															"marketRoute": {
																"type": "string",
																"nullable": true
															},
															"iconUrl": {
																"type": "string",
																"nullable": true
															},
															"action": {
																"type": "string",
																"enum": [
																	"BUY",
																	"SELL"
																]
															},
															"side": {
																"type": "string",
																"enum": [
																	"YES",
																	"NO"
																]
															},
															"type": {
																"type": "string",
																"enum": [
																	"limit",
																	"market"
																]
															},
															"price": {
																"type": "number",
																"nullable": true
															},
															"shares": {
																"type": "number"
															},
															"createdAt": {
																"type": "string"
															},
															"status": {
																"type": "string",
																"enum": [
																	"open"
																]
															}
														},
														"required": [
															"id",
															"marketId",
															"assetId",
															"marketTitle",
															"marketSlug",
															"marketRoute",
															"iconUrl",
															"action",
															"side",
															"type",
															"price",
															"shares",
															"createdAt",
															"status"
														]
													}
												}
											},
											"required": [
												"orders"
											]
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/v1/orders/{orderId}": {
			"get": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"parameters": [
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": true,
						"name": "orderId",
						"in": "path"
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"userId": {
													"type": "string"
												},
												"address": {
													"type": "string"
												},
												"funder_address": {
													"type": "string"
												}
											},
											"required": [
												"userId",
												"address",
												"funder_address"
											],
											"additionalProperties": {
												"nullable": true
											}
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"security": [
					{
						"bearerAuth": []
					}
				],
				"parameters": [
					{
						"schema": {
							"type": "string",
							"minLength": 1
						},
						"required": true,
						"name": "orderId",
						"in": "path"
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												true
											]
										},
										"data": {
											"type": "object",
											"properties": {
												"userId": {
													"type": "string"
												},
												"address": {
													"type": "string"
												},
												"funder_address": {
													"type": "string"
												}
											},
											"required": [
												"userId",
												"address",
												"funder_address"
											],
											"additionalProperties": {
												"nullable": true
											}
										}
									},
									"required": [
										"ok",
										"data"
									]
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					},
					"502": {
						"description": "Upstream Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"ok": {
											"type": "boolean",
											"enum": [
												false
											]
										},
										"error": {
											"type": "object",
											"properties": {
												"code": {
													"type": "string"
												},
												"message": {
													"type": "string"
												}
											},
											"required": [
												"code",
												"message"
											]
										}
									},
									"required": [
										"ok",
										"error"
									]
								}
							}
						}
					}
				}
			}
		}
	}
}
