Teleport

Teleport Pay

Developer Portal

Getting Started

Teleport Pay is a payment gateway supporting 30+ methods — crypto (BTC, ETH, USDT), bank cards (Visa, Mastercard), SEPA, SWIFT, SBP, P2P, and bank transfers. Create invoices via REST API, redirect customers to a hosted payment page, and receive webhook notifications when payment status changes.

Base URL https://api.teleport.ltd/v1

Authentication

All API requests require an API key passed in the X-API-Key header.

X-API-Key: tk_your_api_key_here

Go to the API Keys tab to generate your key.

Endpoints

GET /payment-methods/

Returns available payment method groups and their methods.

curl -s https://api.teleport.ltd/v1/payment-methods/ \
  -H "X-API-Key: tk_your_key"
Show response example
{
  "success": true,
  "groups": [
    {
      "id": "crypto",
      "name": "Crypto",
      "allowed": true,
      "methods": [...]
    }
  ]
}
GET /profiles/

Returns your approved KYB payment profiles. Use the uid of a profile as kyb_uid in /invoice/create/ to invoice on its behalf.

curl -s https://api.teleport.ltd/v1/profiles/ \
  -H "X-API-Key: tk_your_key"
Show response example
{
  "success": true,
  "profiles": [
    {
      "uid": "87c4b9b0-5cab-408c-83a1-2026e5ce918d",
      "name": "SONGKRANE LTD",
      "seller_type": "business",
      "status": "approved",
      "payment_methods": ["card", "crypto"]
    }
  ]
}
GET /currencies/

Returns available crypto and fiat currencies for invoicing.

curl -s https://api.teleport.ltd/v1/currencies/ \
  -H "X-API-Key: tk_your_key"
POST /invoice/create/

Creates a payment invoice and returns a hosted payment page URL.

curl -X POST https://api.teleport.ltd/v1/invoice/create/ \
  -H "X-API-Key: tk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "order_id": "1234",
    "amount": 49.99,
    "currency": "USD",
    "description": "Order #1234",
    "customer_email": "customer@example.com",
    "return_url": "https://yoursite.com/success/",
    "payment_methods": ["crypto", "cards"],
    "kyb_uid": "YOUR_PROFILE_UID"
  }'
Parameters
FieldTypeRequiredDescription
amountnumberYesPayment amount
currencystringYesCurrency code (USD, EUR, USDT...)
order_idstringNoYour internal order ID
descriptionstringNoPayment description
customer_emailstringNoCustomer email
customer_namestringNoCustomer name
return_urlstringNoRedirect URL after payment
cancel_urlstringNoRedirect URL on cancel
webhook_urlstringNoWebhook URL (falls back to key default)
payment_methodsarrayNoe.g. ["crypto", "cards"]. Default: all available
kyb_uidstringNoPayment profile UID (KYB). If omitted, your approved api_integration profile is used. See /profiles/
Show response example
{
  "success": true,
  "payment_id": "pay_8c8e62e273b54997",
  "bill_uid": "8c8e62e2-73b5-4997-...",
  "payment_url": "https://pay.teleport.ltd/bill/...",
  "expires_at": "2026-03-28T06:40:02...",
  "payment_methods": ["crypto", "cards"]
}
POST /invoice/refund/

Refund a previously paid invoice. Stripe card payments only (Visa / Mastercard). For invoices paid via crypto, SBP, YooKassa, PayPal etc. the API returns 400 — refund those manually via the provider dashboard.

curl -X POST https://api.teleport.ltd/v1/invoice/refund/ \
  -H "X-API-Key: tk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "bill_uid": "8c8e62e2-73b5-4997-...",
    "amount": 10.00,
    "reason": "requested_by_customer"
  }'
Parameters
FieldTypeRequiredDescription
bill_uidstringYesInvoice UID from /invoice/create/
amountnumberNoPartial refund amount in original currency. Omit for full refund of the remaining amount.
reasonstringNoOne of requested_by_customer (default), duplicate, fraudulent.
Show response example
{
  "success": true,
  "refund_id": "re_1UAY3E...",
  "amount_refunded": 10.0,
  "currency": "usd",
  "status": "succeeded",
  "is_partial": true,
  "bill_status": "partially_refunded"
}
Non-Stripe error example
{
  "success": false,
  "error": "Refunds are only supported for Stripe payments (Visa / Mastercard). For other payment methods, refund via the provider dashboard.",
  "payment_method": "crypto",
  "provider": null
}
GET /key/info/

Returns current API key settings (webhook URL, name, status).

curl -s https://api.teleport.ltd/v1/key/info/ \
  -H "X-API-Key: tk_your_key"
PATCH /key/update/

Update API key settings (webhook_url, name).

curl -X PATCH https://api.teleport.ltd/v1/key/update/ \
  -H "X-API-Key: tk_your_key" \
  -H "Content-Type: application/json" \
  -d '{"webhook_url": "https://yoursite.com/webhook/"}'

Webhooks

When an invoice status changes, a POST request is sent to your webhook URL.

{
  "event": "invoice.status_changed",
  "payment_id": "pay_8c8e62e273b54997",
  "bill_uid": "8c8e62e2-...",
  "order_id": "1234",
  "status": "paid",
  "amount": 49.99,
  "currency": "USD",
  "commission": 1.25,          // only for status=paid: fee deducted from you
  "commission_rate": 0.025,
  "commission_fixed": 0,
  "net_amount": 48.74,          // credited to your balance
  "net_currency": "usd",
  "timestamp": 1711608002
}

Statuses

StatusDescriptionAction
paidPayment confirmedFulfill the order
expiredInvoice expiredCancel the order
cancelledCancelled by customerCancel the order
failedPayment failedMark as failed
manual_confirmationUnderpayment detectedManual review

Signature Verification

Every webhook includes an X-Webhook-Signature header. Verify using HMAC-SHA256 with your Webhook Secret.

# Python
import hmac, hashlib

def verify_webhook(body: bytes, signature: str, secret: str) -> bool:
    sig = signature.removeprefix('sha256=')
    expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, sig)

Retry Policy

AttemptDelay
1st retry30 seconds
2nd retry5 minutes
3rd retry30 minutes

Always return HTTP 200 to acknowledge receipt.

Payment Flow

Your Server                Teleport Pay              Customer
    |                           |                        |
    |-- POST /invoice/create/ ->|                        |
    |<- { payment_url } --------|                        |
    |                           |                        |
    |-- redirect customer ----->|----------------------->|
    |                           |    hosted payment page  |
    |                           |<-- customer pays -------|
    |                           |                        |
    |<-- webhook (paid) --------|                        |
    |                           |-- redirect to -------->|
    |                           |   return_url           |

One Prompt — Accept Payments

Copy this prompt, paste into Claude / Cursor / any AI — your API key is already inside. That's it.