> ## Documentation Index
> Fetch the complete documentation index at: https://docs.p2p.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started

## Syncro — Endpoint Configuration

**An API key is required to unlock the full rate**. Without an API key, these endpoints serve public traffic at **1 RPS**. With an API key, you get the dedicated rate of **50 RPS**.

To get an API key, request access through the [Syncro Sender page](https://www.p2p.org/products/syncro-solana-transaction-sender) on [P2P.ORG](https://www.p2p.org/), and our team will contact you to arrange setup.

### HTTP Endpoints

* Amsterdam — [http://ams3.sender.syncro.p2p.org:8080](http://ams3.sender.syncro.p2p.org:8080)
* Frankfurt — [http://fra.sender.syncro.p2p.org:8080](http://fra.sender.syncro.p2p.org:8080)
* Washington, DC — [http://us.sender.syncro.p2p.org:8080](http://us.sender.syncro.p2p.org:8080)​

### QUIK Endpoints

* Amsterdam — [http://ams3.sender.syncro.p2p.org:8090](http://ams3.sender.syncro.p2p.org:8090)
* Frankfurt — [http://fra.sender.syncro.p2p.org:8090](http://fra.sender.syncro.p2p.org:8090)
* Washington, DC — [http://us.sender.syncro.p2p.org:8090](http://us.sender.syncro.p2p.org:8090)

Available to authorized clients only. To get access, create a key pair and send your public key to the P2P team.

## Sending a transaction via public endpoint

The public endpoint requires no API key. Instead, include a **System Program transfer** to one of the tip accounts in your transaction.

**Tip accounts:**

```
BPZrtYhdoAhiHWV5EgGLoV7bZFbMamBZurGDq4DmST8v
7D5pdbkV75Sr73M1YFNZwXMed6DenwkdfbJwVWrX6drQ
ELpn2NryEW4B3psG36eSjF45YcGMQpGGuu9J2AgAccbV
FnckAPC9PitnRpGZM2M4WLwb3w9odRLJ7EDRZDngjvd6
3ZnDTgvVfwzqwWoqAUmDkgVtXvXqjmeb5t9zxD5pMbmv
3SLDFcdCzMbcFNguZhzmV4zqEAUvcPoKY13akpE4Tq1p
48tT6LJqrsoFrLpzZSHkjGdGTWtsJ1PvjgWZjh8qF1RK
7GM9fpVMHHcrK4cgzfVdzJvjiy1bSyfwSYzhxvgbfVLg
CBd8GE3ffMJKf3iCCcNNBEifMxH1WpgtTzRnXPxxbjGE
```

The minimum tip is 100,000 lamports on public endpoints and 50,000 lamports on private endpoints.

If the tip is missing or insufficient, an error is returned:

* **Missing tip:** `"Missing tip: no transfer to tip accounts found"` (code `-32602`)
* **Insufficient tip:** `"Insufficient tip: provided X lamports, required Y lamports"` (code `-32602`)

How to add a tip to your transaction:

<CodeGroup>
  ```javascript JavaScript theme={null}
  transaction.addInstruction(SystemProgram.transfer(yourPublicKey, 'BPZrtYhdoAhiHWV5EgGLoV7bZFbMamBZurGDq4DmST8v', 100000));
  ```
</CodeGroup>

Example request ([cURL](https://curl.se/)):

<CodeGroup>
  ```bash bash theme={null}
  curl -X POST https://sfls.l2.p2p.org/public \
    -H "Content-Type: application/json" \
    -d '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "sendTransaction",
      "params": ["<BASE64_ENCODED_TX_WITH_TIP>", {"encoding": "base64"}]
    }'
  ```
</CodeGroup>

> **Note:** The transaction itself must contain a tip instruction to a tip account. No `Authorization` header is needed.

Example response:

<CodeGroup>
  ```json JSON theme={null}
  {
    "jsonrpc": "2.0",
    "result": "<TRANSACTION_SIGNATURE>",
    "id": 1
  }
  ```
</CodeGroup>

## Sending a transaction via private endpoint

Contact the P2P.org team to get your API key and client profile: [t.me/P2Pstaking](http://t.me/P2Pstaking).

Syncro Sender supports two authentication headers via private endpoint. If both are present, `Authorization: Bearer` takes priority.

| Header          | Format             | Priority      |
| --------------- | ------------------ | ------------- |
| `Authorization` | `Bearer <API_KEY>` | 1 (preferred) |
| `X-Api-Key`     | `<API_KEY>`        | 2 (fallback)  |

Example request:

<CodeGroup>
  ```bash bash theme={null}
  curl -X POST https://sfls.l2.p2p.org \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -d '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "sendTransaction",
      "params": ["<BASE64_ENCODED_TX>", {"encoding": "base64"}]
    }'
  ```
</CodeGroup>

Example response:

<CodeGroup>
  ```json JSON theme={null}
  {
    "jsonrpc": "2.0",
    "result": "<TRANSACTION_SIGNATURE>",
    "id": 1
  }
  ```
</CodeGroup>

## Error codes

| Code     | Name               | HTTP Status | Description                                                         |
| -------- | ------------------ | ----------- | ------------------------------------------------------------------- |
| `-32700` | PARSE\_ERROR       | 400         | Malformed JSON-RPC request body                                     |
| `-32600` | INVALID\_REQUEST   | 400 / 403   | Invalid request structure or authentication failure                 |
| `-32601` | METHOD\_NOT\_FOUND | 200         | Unsupported method (e.g., non-`sendTransaction` on public endpoint) |
| `-32602` | INVALID\_PARAMS    | 200 / 400   | Invalid parameters, missing tip, or insufficient tip amount         |
| `-32603` | INTERNAL\_ERROR    | 500         | Server-side processing error                                        |
| `-32000` | SERVER\_ERROR      | 500         | General server error                                                |
| `-32005` | RATE\_LIMIT        | 429         | Rate limit exceeded                                                 |

Error response format:

<CodeGroup>
  ```json JSON theme={null}
  {
    "jsonrpc": "2.0",
    "result": null,
    "error": {
      "code": -32005,
      "message": "Rate limit exceeded"
    },
    "id": 1
  }
  ```
</CodeGroup>

## Rate limit headers

If the rate limit is hit (HTTP 429), the response includes these headers:

| Header                  | Description                                            |
| ----------------------- | ------------------------------------------------------ |
| `X-RateLimit-Limit`     | Maximum requests per second for your client            |
| `X-RateLimit-Remaining` | Remaining requests in the current 1-second window      |
| `Retry-After`           | Seconds until the rate limit window resets (minimum 1) |


## Related topics

- [Optimizing Performance](/docs/syncro-sender-optimizing-performance.md)
- [Pricing, Rate Limits & Support](/docs/syncro-sender-pricing-rate-limits.md)
