Getting Started

Syncro Sender by P2P.ORG offers two access modes: a public endpoint that requires no API key (just include a tip in your transaction) and a private endpoint authenticated with an API key.

Public endpoints:

Private endpoints: Request access through the Syncro Sender page on P2P.ORG, and our team will contact you to arrange setup.

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 Authorization header 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.

HeaderFormatPriority
AuthorizationBearer <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

CodeNameHTTP StatusDescription
-32700PARSE_ERROR400Malformed JSON-RPC request body
-32600INVALID_REQUEST400 / 403Invalid request structure or authentication failure
-32601METHOD_NOT_FOUND200Unsupported method (e.g., non-sendTransaction on public endpoint)
-32602INVALID_PARAMS200 / 400Invalid parameters, missing tip, or insufficient tip amount
-32603INTERNAL_ERROR500Server-side processing error
-32000SERVER_ERROR500General server error
-32005RATE_LIMIT429Rate 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:

HeaderDescription
X-RateLimit-LimitMaximum requests per second for your client
X-RateLimit-RemainingRemaining requests in the current 1-second window
Retry-AfterSeconds until the rate limit window resets (minimum 1)

What's next?