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 on P2P.ORG, and our team will contact you to arrange setup.
HTTP Endpoints
- Amsterdam — http://sfls-ams-plain.l2.p2p.org/ — co-located with validator (Recommended)
- Tokyo — http://sfls-geo-tky.l2.p2p.org/
- Singapore — http://sfls-geo-sgp.l2.p2p.org/
- New York — http://sfls-geo-nyc.l2.p2p.org/
- Frankfurt — http://sfls-geo-fra.l2.p2p.org/
- London — http://sfls-geo-lon.l2.p2p.org/
Geo-routed (auto-routes to nearest region)
TPU Endpoint
Available to authorized clients only. To get access, create a key pair and send your public key to the P2P team.
Geo-focused TPU clients
We can provision geo-focused TPU clients on request. If you'd like a TPU client pinned to a specific region, please reach out 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.
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:
transaction.addInstruction(SystemProgram.transfer(yourPublicKey, 'BPZrtYhdoAhiHWV5EgGLoV7bZFbMamBZurGDq4DmST8v', 100000));Example request (cURL):
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"}]
}'Note: The transaction itself must contain a tip instruction to a tip account. No
Authorizationheader is needed.
Example response:
{
"jsonrpc": "2.0",
"result": "<TRANSACTION_SIGNATURE>",
"id": 1
}Sending a transaction via private endpoint
Contact the P2P.org team to get your API key and client profile: 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:
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"}]
}'Example response:
{
"jsonrpc": "2.0",
"result": "<TRANSACTION_SIGNATURE>",
"id": 1
}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:
{
"jsonrpc": "2.0",
"result": null,
"error": {
"code": -32005,
"message": "Rate limit exceeded"
},
"id": 1
}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) |
What's next?
Updated 5 days ago