Open in your browser for best results

Inside Facebook, number lists sometimes don’t load. Tap continue to open Proxnum in Chrome or Safari — one tap, no copying links.

Référence API

Référence API développeur

Documentation complète pour implémenter la vérification SMS. Toutes les réponses sont en JSON.

Note : Référence pour développeurs et intégrateurs. Chaque endpoint inclut explications, authentification, exemples de requêtes et réponses.

Authentification

Tous les endpoints exigent un Bearer token dans l'en-tête Authorization.

Obtenir votre clé API
  1. Connectez-vous à Proxnum et ouvrez votre page profil
  2. Allez à la section « Gestion des clés API »
  3. Cliquez « Créer une clé API »
  4. Copiez le token affiché

Incluez le token API dans chaque requête :

Authorization: Bearer YOUR_API_TOKEN_HERE
Accept: application/json
Content-Type: application/json

Liens rapides :

Format de réponse commun

Les erreurs utilisent une structure normalisée avec le champ code. Toutes les erreurs suivent ce modèle :

{
  "success": false,
  "code": "no_numbers",
  "message": "No numbers available for the selected service and country"
}

Endpoints

GET /api/v1/resell/price?service=&country=

Obtenir prix de base et de vente pour un service et un pays. Estimez le coût avant commande.

Paramètres (query) : service (string), country (int)

Exemple de requête :

curl -s -X GET "https://proxnum.com/api/v1/resell/price?service=ig&country=6" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Réponse succès :

{
  "country": "6",
  "service": "ig",
  "base_price": 0.0334,
  "sell_price": 0.1114892
}

GET /api/v1/prices

Tarification complète pour tous les services et pays. Retourne prix de base et prix revendeur.

Paramètres (query, optionnels) :

  • service service (string) — filtrer par code service (ex. ig, wa, tg)
  • country country (int) — filtrer par code pays

Exemple (tous les prix) :

curl -s -X GET "https://proxnum.com/api/v1/prices" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Exemple (filtré par pays) :

curl -s -X GET "https://proxnum.com/api/v1/prices?country=6" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Réponse succès (filtrée par pays) :

{
  "success": true,
  "prices": {
    "6": {
      "ig": {
        "base_price": 0.0334,
        "sell_price": 0.1114892,
        "available": 245
      },
      "wa": {
        "base_price": 0.0389,
        "sell_price": 0.1298737,
        "available": 189
      },
      "tg": {
        "base_price": 0.0223,
        "sell_price": 0.0744551,
        "available": 521
      },
      "go": {
        "base_price": 0.0278,
        "sell_price": 0.0928206,
        "available": 312
      }
    }
  }
}

Note : Réponse imbriquée : premier niveau = codes pays, second = codes service. Chaque service contient base_price, sell_price et available (ou null).


POST /api/v1/resell/virtual/buy

Acheter un numéro temporaire (virtuel). Tente d'allouer un numéro et de débiter le compte.

Corps (JSON) : {"service":"ig","country":6}

Exemple de requête :

curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/buy" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"service":"ig","country":6}'

Réponse succès (normalisée) :

{
  "success": true,
  "activation": {
    "id": 737,
    "phone": "62895406203932",
    "activation_id": "4390520873",
    "msg": "Waiting Sms",
    "date_created": "2025-11-08 21:50:34",
    "amount_paid": 0.111489,
    "status": 1
  }
}

Codes d'erreur courants :

{
  "success": false,
  "code": "no_numbers",
  "message": "No numbers available for this service in the selected country"
}

{
  "success": false,
  "code": "insufficient_balance",
  "message": "Not enough balance to place the order"
}

GET /api/v1/resell/virtual/{id}/status

Vérifier le statut d'une activation. {id} accepte l'activation id retourné à l'achat.

Exemple de requête :

curl -s -X GET "https://proxnum.com/api/v1/resell/virtual/4390520873/status" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Succès (code disponible) :

{
  "success": true,
  "status": "completed",
  "code": "1234",
  "activation": { "id": 737, "phone": "628...", "activation_id": "4390520873" }
}

POST /api/v1/resell/virtual/resend

Demander un renvoi/réactivation. Utilisez l'activation id dans le corps.

Corps : {"activation_id":"4390520873"}

curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/resend" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"activation_id":"4390520873"}'

Réponse (acceptée) :

{
  "success": true,
  "message": "Resend requested; new activation created",
  "activation": { "id": 738, "activation_id": "4390520874", "phone": "628..." }
}

POST /api/v1/resell/virtual/cancel

Demander annulation et remboursement. Le serveur évalue si l'activation est remboursable.

Corps : {"activation_id":"4390520873"}

curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/cancel" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"activation_id":"4390520873"}'

Accepté :

{
  "success": true,
  "code": "cancel_accepted",
  "message": "Cancellation accepted, refund processed"
}

Rejeté :

{
  "success": false,
  "code": "cancel_rejected",
  "message": "Cancellation rejected — activation already completed or not refundable"
}

GET /api/v1/resell/activations

Liste des activations de l'utilisateur (paginée). Paramètres page et per_page.

curl -s -X GET "https://proxnum.com/api/v1/resell/activations?page=1&per_page=25" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Numéros en location

Les numéros en location restent attribués à votre compte pendant la durée achetée et reçoivent tous les SMS qui leur sont envoyés. Utilisez ces endpoints pour afficher à vos clients les durées et prix disponibles, louer des numéros, lire les SMS reçus, annuler dans le délai autorisé et prolonger les locations actives.

Tous les endpoints de location sont aussi disponibles sans le préfixe /resell (par exemple /api/v1/rental/catalog). Le catalogue public /api/v1/rental/catalog ne nécessite pas de jeton.

Les réponses contiennent "ok" (true ou false), un code "error" en cas d’échec et un "message" lisible dans la langue de votre compte. Le code HTTP reflète le résultat (200 succès, 202 accepté et en attente, 4xx problème de requête, 503 temporairement indisponible).

Statuts de location

  • active — Le numéro est à vous et reçoit des SMS jusqu’à expires_at.
  • cancelling — Une annulation a été demandée et attend sa confirmation. Aucun remboursement n’a encore été effectué.
  • cancelled — L’annulation a été confirmée et amount_paid a été recrédité sur votre solde.
  • expired — La période de location est terminée.

GET /api/v1/resell/rental/catalog?country=&hours=

Renvoie les durées de location proposées actuellement, les pays et les services avec votre prix et le stock pour un pays et une durée. La liste des durées provient en temps réel de notre fournisseur de numéros : lisez-la toujours dans durations[] au lieu de coder des valeurs en dur.

Paramètres : country (facultatif, identifiant numérique du pays, voir la page des codes pays) et hours (facultatif, l’une des valeurs de durations[].hours). Les valeurs invalides ou absentes sont remplacées par les valeurs par défaut renvoyées dans la réponse.

Exemple de requête :

curl -s "https://proxnum.com/api/v1/resell/rental/catalog?country=187&hours=168" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
{
  "ok": true,
  "country": "187",
  "hours": 168,
  "durations": [
    { "hours": 24, "label": "1 day" },
    { "hours": 72, "label": "3 days" },
    { "hours": 168, "label": "1 week" },
    { "hours": 720, "label": "30 days" }
  ],
  "countries": [ { "id": "187", "name": "USA" }, { "id": "16", "name": "United Kingdom" } ],
  "services": [
    { "code": "wa", "name": "WhatsApp", "icon": "...", "price": 4.2, "stock": 35 }
  ],
  "cancel_window_seconds": 120
}

POST /api/v1/resell/rental/buy

Loue un numéro et débite votre solde. hours doit être l’une des valeurs durations[].hours du catalogue. Vous pouvez envoyer max_price : si le prix actuel est plus élevé, rien n’est débité et vous recevez l’erreur price_changed avec le nouveau prix.

Corps (JSON) : {"service":"wa","country":187,"hours":168,"max_price":4.20}

curl -s -X POST "https://proxnum.com/api/v1/resell/rental/buy" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"service":"wa","country":187,"hours":168,"max_price":4.20}'
{
  "ok": true,
  "error": null,
  "message": "Your rental number is ready.",
  "price": 4.2,
  "balance": 25.8,
  "rental": {
    "id": 512,
    "phone": "14155550123",
    "service": "wa",
    "service_name": "WhatsApp",
    "country": "187",
    "country_name": "USA",
    "status": "active",
    "amount_paid": 4.2,
    "hours": 168,
    "purchased_at": "2026-10-03T12:00:00+03:00",
    "expires_at": "2026-10-10T12:00:00+03:00",
    "cancel_until": "2026-10-03T12:02:00+03:00",
    "can_cancel": true,
    "cancel_pending": false,
    "can_extend": true
  }
}

Erreurs courantes : invalid_period (422), no_numbers (409), price_changed (409), insufficient_funds (402), option_unavailable (422), unavailable ou provider_unreachable (503, aucun débit).


GET /api/v1/resell/rental/{id}/status

Renvoie la location avec les SMS reçus (les plus récents d’abord). Chaque message contient le texte et, s’il est détecté, le code. Interrogez toutes les 5 à 10 secondes en attendant un message. id peut être notre identifiant de location ou l’identifiant d’activation renvoyé à l’achat.

curl -s "https://proxnum.com/api/v1/resell/rental/512/status" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"
{
  "ok": true,
  "rental": {
    "id": 512,
    "phone": "14155550123",
    "status": "active",
    "expires_at": "2026-10-10T12:00:00+03:00",
    "can_cancel": false,
    "can_extend": true,
    "messages": [
      { "id": 9001, "sender": "WhatsApp", "text": "Your WhatsApp code: 123-456", "code": "123456", "date": "2026-10-03T12:05:10+03:00" }
    ]
  }
}

POST /api/v1/resell/rental/cancel

Une location ne peut être annulée que dans les 2 minutes suivant l’achat, si elle n’a reçu aucun SMS et n’a pas été prolongée. L’annulation est confirmée auprès du fournisseur de numéros, ce qui peut prendre quelques minutes.

Corps : {"id":512}

curl -s -X POST "https://proxnum.com/api/v1/resell/rental/cancel" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"id":512}'
HTTP/1.1 202 Accepted
{
  "ok": true,
  "pending": true,
  "refunded": 0,
  "message": "Cancellation requested. Your refund will be added once the cancellation is confirmed, usually within a few minutes.",
  "rental": { "id": 512, "status": "cancelling", "cancel_pending": true }
}

HTTP/1.1 200 OK
{
  "ok": true,
  "pending": false,
  "refunded": 4.2,
  "balance": 30,
  "rental": { "id": 512, "status": "cancelled" }
}

HTTP/1.1 409 Conflict
{
  "ok": false,
  "error": "sms_received",
  "message": "This number has already received an SMS, so it cannot be cancelled."
}
HTTP 202 avec "pending": true signifie que la demande est acceptée mais que le remboursement n’a pas encore eu lieu. Interrogez l’endpoint de statut : status passe à cancelled une fois amount_paid remboursé, ou revient à active si l’annulation est refusée (par exemple si un SMS est arrivé entre-temps). Aucun remboursement n’est jamais effectué avant confirmation, ni deux fois.

Erreurs courantes : window_closed, sms_received, extended, cancel_pending (une demande est déjà en cours), not_active (toutes en 409).


GET /api/v1/resell/rental/{id}/extend-options

Liste les durées et prix de renouvellement disponibles pour une location active. Les prix sont lus en temps réel pour ce numéro précis.

curl -s "https://proxnum.com/api/v1/resell/rental/512/extend-options" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

{
  "ok": true,
  "options": [
    { "hours": 24, "label": "1 day", "price": 1.1 },
    { "hours": 168, "label": "1 week", "price": 5.0 }
  ]
}

POST /api/v1/resell/rental/{id}/extend

Prolonge une location active de l’une des durées renvoyées par les options de prolongation et débite votre solde. Envoyez max_price pour ne jamais être débité plus que le prix affiché à votre client. Les locations prolongées ne peuvent plus être annulées.

Corps (JSON) : {"hours":168,"max_price":5.00}

curl -s -X POST "https://proxnum.com/api/v1/resell/rental/512/extend" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"hours":168,"max_price":5.00}'

{
  "ok": true,
  "message": "Rental extended by 1 week.",
  "price": 5,
  "balance": 25,
  "rental": { "id": 512, "status": "active", "expires_at": "2026-10-17T12:00:00+03:00", "can_cancel": false }
}

Erreurs courantes : invalid_period (422), price_changed (409), insufficient_funds (402), not_active (409), unavailable (503).


GET /api/v1/resell/rentals

Liste paginée de vos locations, les plus récentes d’abord. Paramètres : page et per_page (1 à 100).

curl -s "https://proxnum.com/api/v1/resell/rentals?page=1&per_page=25" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

{ "ok": true, "total": 3, "page": 1, "per_page": 25, "data": [ { "id": 512, "phone": "14155550123", "status": "active", "...": "..." } ] }

Notes d'implémentation

  • Les opérations de débit sont idempotentes par commande ; vérifiez order ou transaction.
  • Utilisez l'endpoint price pour simuler les coûts avant commande.
  • Codes d'erreur : no_numbers, insufficient_balance, service_unavailable, cancel_rejected.
Bonnes pratiques :
  • Gérez toujours succès et erreurs dans votre intégration
  • Implémentez la gestion des timeouts réseau
  • Mettez en cache les listes pays et services
  • Utilisez les webhooks pour les mises à jour en temps réel

chat us