# Perps Hub

## Perps Hub API URLs

### Format

[https://www.domainPerEnv/v1/{symmDeploymentId}/{multiaccount}](https://domainperenv/rfq/v1/:multiaccount)

⚠️Multiaccounts must be valid checksummed addresses

```json
{
  "BSC (56a)": {
    "prod": "https://www.perps-streaming.com/v1/56a/{multiaccount}"
  },
  "ARBITRUM (42161a)": {
    "prod": "https://www.perps-streaming.com/v1/42161a/{multiaccount}"
  },
  "MANTLE (5000a)": {
    "prod": "https://www.perps-streaming.com/v1/5000a/{multiaccount}"
  },
  "MODE (34443a)": {
    "prod": "https://www.perps-streaming.com/v1/34443a/{multiaccount}"
  },
  "BASE (8453a)": {
    "prod": "https://www.perps-streaming.com/v1/8453a/{multiaccount}"
  },
  "BERACHAIN (80094a)": {
    "prod": "https://www.perps-streaming.com/v1/80094a/{multiaccount}"
  },
  "COTI (2632500a)": {
    "prod": "https://www.perps-streaming.com/v1/2632500a/{multiaccount}"
  },
  "SPOOKY (250a)": {
    "prod": "https://www.perps-streaming.com/v1/250a/{multiaccount}"
  }
}
```

## Perps Hub Endpoints:

### Streaming

### Paths

1. GET `/contract-symbols`
2. GET `/get_locked_params/<symbol>`
3. GET `/price-range/<symbol>`
4. GET `/open-interest`
5. GET `/notional_cap/<symbol>`
6. GET `/mark-price/<symbol>`
7. GET `/get_funding_info`
8. POST `/position_state/<offset>/<size>`
   1. Request Body: `{quote_id: number}`
   2. Response Status: `200` or `404`
   3. Response Body (200): `{ count: number; position_state: { id: string; quote_id: number; filled_amount_open: number; filled_amount_close: number; action_status: 'failed' | 'success'; last_seen_action: string; failure_type: string; order_type: number; create_time: number; modify_time: number; counterparty_address: string; error_code: string; state_type: string; }[]; };`

### Examples

| Get locked params on 56a (BSC)             | <https://www.perps-streaming.com/v1/56a/0x650a2D6C263A93cFF5EdD41f836ce832F05A1cF3/get_locked_params/BTCUSDT> |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
| Get mark price of symbol on 5000a (Mantle) | <https://www.perps-streaming.com/v1/5000a/0xecbd0788bb5a72f9dfdac1ffeaaf9b7c2b26e456/mark-price/ETHUSDT>      |

## Instant trading

### Paths

1. GET `/instant_close/<partyA>`
   1. Response Status: `200`
   2. Response: `{quote_id: number, quantity_to_close: number, close_price: number}[]`
2. POST /`instant_open`&#x20;
   1. Request body:&#x20;

      ```
      {
       "symbolId": "string",
       "positionType": 0, // 0 for long, 1 for short
       "orderType": 0,    // 0 for limit, 1 for market
       "price": "string",
       "quantity": "string",
       "cva": "string",
       "lf": "string",
       "partyAmm": "string",
       "partyBmm": "string",
       "maxFundingRate": "string",
       "deadline": 1625234523 // Unix timestamp
      }
      ```

* Response Status: `200` or `400`
* Response Body: In case of `400` there will be a message string in body

1. POST `/instant_close` **(⚠️This endpoint requires an authorization: Bearer {token} header. This can be obtained from the /login endpoint.)**
   1. Request Body: `{close_price: string, quantity_to_close: string, quote_id: number}`
   2. Response Status: `200` or `400`
   3. Response Body: In case of `400` there will be a message string in body
2. GET `/nonce/<partyA>`
   1. Response Status: `200`
   2. Response Body: `{nonce: string}`
3. POST /login&#x20;
   1. Response Status: `200` or `400`
   2. Response Body: In case of `400` there will be a message string in body giving further details

### Examples

<table data-header-hidden><thead><tr><th width="284"></th><th></th></tr></thead><tbody><tr><td>Get instant close status of a quote on Mantle</td><td><a href="https://www.perps-streaming.com/instant/v1/5000a/0x614bB1F3e0Ae5A393979468ED89088F05277312c/instant_close/0xBd047C4F108282745E0c4DFE2f97fFaF2e67032b">https://www.perps-streaming.com/v1/5000a/0xecbd0788bb5a72f9dfdac1ffeaaf9b7c2b26e456/instant_close/0xBd047C4F108282745E0c4DFE2f97fFaF2e67032b</a></td></tr></tbody></table>

## PartyB Contract Addresses

<table><thead><tr><th width="228">Chain</th><th>PartyB Address</th></tr></thead><tbody><tr><td>BASE</td><td>0x1EcAbF0Eba136920677C9575FAccee36f30592cf</td></tr><tr><td>ARBITRUM</td><td>0x00c069d68bc7420740460dbc3cc3fff9b3742421</td></tr><tr><td>MANTLE</td><td>0x12de0352dd4187af5797f5147c4179f9624346e2</td></tr><tr><td>BNB</td><td>0xd5a075c88a4188d666fa1e4051913be6782982da</td></tr><tr><td>MODE</td><td>0x87fc464fa528260f1eeab94fa20f73fed8536eb7</td></tr><tr><td>BERA</td><td>0x8141c1840F7D190Cd24239C22b1e560e08999B12</td></tr><tr><td>SONIC</td><td>0x7D387771f6E23f353a4afCE21af521875C0825D0</td></tr><tr><td>COTI</td><td>0x61109A6Eb070a860B1Da2A38f93ca2B884B54f90</td></tr></tbody></table>

## Conditional Orders Handler

[PerpsHub TP/SL Implementation](https://docs.symm.io/api-endpoints-and-deployments/solver-addresses-and-endpoints/perps-hub/perpshub-tp-sl-implementation)
