Password Pusher API v2
BETADocumentación completa de la API REST para la integración Password Pusher en sus aplicaciones
Aviso Beta: La API v2 está actualmente en fase beta. Aunque hemos hecho todo lo posible para garantizar la estabilidad, es posible que haya cambios de última hora antes de la versión final. Agradecemos sus comentarios
empuja
Los push permiten la transmisión segura y unidireccional de datos confidenciales a los destinatarios. Crea un push con una URL secreta que contenga texto, archivos, códigos QR o URL y compártelo con quien quieras, sin exponer datos confidenciales en correos electrónicos, chats o registros.
Perfecto para la incorporación de empleados, el envío de credenciales de cuentas, la transmisión de documentos confidenciales o el intercambio de cualquier información sensible. Los envíos caducan automáticamente después de una duración o un número de visualizaciones especificados, y el seguimiento completo del ciclo de vida está disponible en los registros de auditoría de cada envío.
POST /api/v2/pushes
Crea un nuevo push con la carga útil proporcionada.
Cuerpo de la solicitud (JSON)
{
"push": {
"payload": "secret_password_123",
"expire_after_duration": 6,
"expire_after_views": 5,
"passphrase": "optional_passphrase",
"name": "Database Credentials",
"note": "Internal note",
"deletable_by_viewer": true,
"retrieval_step": true,
"kind": "text"
},
"account_id": 123
}
Cuerpo de la solicitud con archivos (multipart/form-data)
curl -X POST https://us.pwpush.com/api/v2/pushes \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "push[payload]=secret_password_123" \
-F "push[expire_after_duration]=6" \
-F "push[expire_after_views]=5" \
-F "push[name]=Database Credentials" \
-F "push[files][]=@/path/to/file1.pdf" \
-F "push[files][]=@/path/to/file2.txt"
Nota: Para adjuntar archivos, utilice multipart/form-data formato y establecer kind: "file". Se pueden adjuntar varios archivos utilizando push[files][].
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
payload
requerido
|
string | El texto secreto para compartir |
expire_after_duration
opcional
|
integer (0-17) | Enum de duración (0-17) |
expire_after_views
opcional
|
integer (1-100) | Número de visitas antes de la expiración |
passphrase
opcional
|
string | Requiere contraseña para ver |
name
opcional
|
string | Un nombre para el empuje |
note
opcional
|
string | Nota interna (sólo visible para el creador) |
deletable_by_viewer
opcional
|
boolean | Permitir a los espectadores borrar el push |
retrieval_step
opcional
|
boolean | Requieren un paso adicional para recuperarse |
kind
opcional
|
string | Tipo: "text", "file", "url", o "qr" (por defecto "text") |
notify_emails_to
opcional
|
string | Direcciones de correo electrónico a las que se notificará la creación de un push (separadas por comas) |
notify_emails_to_locale
opcional
|
string | Configuración regional (idioma) en la que se enviarán las notificaciones por correo electrónico |
authenticated_recipients
opcional
|
boolean | Exige la verificación mediante OTP por correo electrónico antes de poder ver el contenido. Requiere la configuración «notify_emails_to». Cuando está habilitada, la consulta solo se puede realizar desde el navegador (la consulta a la API devuelve un error 403). |
account_id
opcional
|
integer | El ID de cuenta al que asociar el push (para usuarios con varias cuentas) |
Valores de duración para expire_after_duration
Campos de respuesta
Los siguientes campos se devuelven en la respuesta al crear un push. Nota: la carga útil y los archivos NO se devuelven al crear; sólo están disponibles cuando se recupera un push mediante GET.
| Campo | Tipo | Ejemplo | Descripción |
|---|---|---|---|
| account_id | integer or null | 1 | ID de cuenta del propietario |
| created_at | string | "2025-02-17T10:00:00.000Z" | Hora de creación de la ISO 8601 |
| days_remaining | integer | 1 | Obsoleto Días enteros restantes (0 cuando < 1 día); prefer expires_at / expires_in |
| deletable_by_viewer | boolean | true | Si el destinatario puede borrar el push |
| deleted | boolean | false | Si el push se ha borrado explícitamente |
| expire_after_days | integer | 1 | Obsoleto Días aproximados (derivados de la duración) |
| expire_after_duration | integer | 6 | Enum de duración (0-17); véase la tabla anterior |
| expire_after_views | integer | 5 | Número máximo de visitas antes de la expiración |
| expired | boolean | false | Si el push ha expirado |
| expired_on | string or null | null | ISO 8601 cuando el push ha caducado; null si no ha caducado |
| expires_at | string or null | "2025-02-18T10:00:00.000Z" | Hora ISO 8601 en que caduca el push; null si ha caducado |
| expires_in | number | 86400 | Segundos hasta la expiración (0 si ha expirado) |
| html_url | string | "https://.../p/abc" | URL para abrir el push en el navegador |
| json_url | string | "https://.../p/abc.json" | URL para recuperar el push como JSON |
| name | string or null | "Database credentials" | Nombre opcional para el push |
| note | string or null | null | Nota privada opcional |
| notify_emails_to | string or null | null | Correos electrónicos para notificar al crear (sólo premium) |
| passphrase | string or null | null | Presente sólo si push tiene una frase de contraseña (valor oculto) |
| retrieval_step | boolean | false | Si es necesario un paso adicional para recuperar |
| updated_at | string | "2025-02-17T10:00:00.000Z" | Hora de la última actualización de ISO 8601 |
| url_token | string | "fkwjfvhall92" | Identificador secreto único para el empuje |
| views_remaining | integer | 5 | Vistas restantes antes de la expiración |
Ejemplo de respuesta:
{
"expire_after_duration": 6,
"expire_after_views": 5,
"expired": false,
"url_token": "fkwjfvhall92",
"deletable_by_viewer": true,
"retrieval_step": false,
"expired_on": null,
"passphrase": null,
"created_at": "2025-02-17T10:00:00.000Z",
"updated_at": "2025-02-17T10:00:00.000Z",
"expire_after_days": 1,
"views_remaining": 5,
"deleted": false,
"days_remaining": 1,
"expires_at": "2025-02-18T10:00:00.000Z",
"expires_in": 86400,
"json_url": "https://example.com/p/fkwjfvhall92.json",
"html_url": "https://example.com/p/fkwjfvhall92",
"account_id": 1,
"note": null,
"name": "Database Credentials"
}
Ejemplo de solicitud
curl -X POST https://us.pwpush.com/api/v2/pushes \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"push": {
"payload": "MySecretPassword123",
"expire_after_duration": 6,
"expire_after_views": 3
}
}'
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://us.pwpush.com/api/v2/pushes')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request['Content-Type'] = 'application/json'
request.body = {
push: {
payload: 'MySecretPassword123',
expire_after_duration: 6,
expire_after_views: 3
}
}.to_json
response = http.request(request)
puts response.body
import requests
import json
url = 'https://us.pwpush.com/api/v2/pushes'
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
data = {
'push': {
'payload': 'MySecretPassword123',
'expire_after_duration': 6,
'expire_after_views': 3
}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
$headers = @{
'Authorization' = 'Bearer YOUR_API_TOKEN'
'Content-Type' = 'application/json'
}
$body = @{
push = @{
payload = 'MySecretPassword123'
expire_after_duration = 6
expire_after_views = 3
}
} | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod -Uri 'https://us.pwpush.com/api/v2/pushes' `
-Method Post `
-Headers $headers `
-Body $body
$response | ConvertTo-Json
GET /api/v2/pushes/:url_token
Recupera la carga secreta de un push. Esto incrementa el recuento de vistas y puede expirar el push.
Campos de respuesta
Los siguientes campos se devuelven al recuperar un push. Este punto final devuelve la carga útil y los archivos que no están disponibles en otros puntos finales.
| Campo | Tipo | Ejemplo | Descripción |
|---|---|---|---|
| created_at | string | "2025-02-17T10:00:00.000Z" | Hora de creación de la ISO 8601 |
| days_remaining | integer | 1 | Obsoleto Días enteros restantes (0 cuando < 1 día); prefer expires_at / expires_in |
| deletable_by_viewer | boolean | true | Si el destinatario puede borrar el push |
| deleted | boolean | false | Si el push se ha borrado explícitamente |
| expire_after_days | integer | 1 | Obsoleto Días aproximados (derivados de la duración) |
| expire_after_duration | integer | 6 | Enum de duración (0-17) |
| expire_after_views | integer | 5 | Número máximo de visitas antes de la expiración |
| expired | boolean | false | Si el push ha expirado |
| expired_on | string or null | null | ISO 8601 cuando el push ha caducado; null si no ha caducado |
| expires_at | string or null | "2025-02-18T10:00:00.000Z" | Hora ISO 8601 en que caduca el push; null si ha caducado |
| expires_in | number | 86400 | Segundos hasta la expiración (0 si ha expirado) |
| files | array | [{ filename, content_type, url }] | Metadatos de archivos adjuntos con URL de descarga |
| html_url | string | "https://.../p/abc" | URL para abrir el push en el navegador |
| json_url | string | "https://.../p/abc.json" | URL para recuperar el push como JSON |
| passphrase | string or null | null | Presente sólo si push tiene una frase de contraseña (valor oculto) |
| payload | string or null | "secret123" | El contenido secreto; null cuando caduca |
| retrieval_step | boolean | false | Si es necesario un paso adicional para recuperar |
| updated_at | string | "2025-02-17T10:00:00.000Z" | Hora de la última actualización de ISO 8601 |
| url_token | string | "fkwjfvhall92" | Identificador secreto único para el empuje |
| views_remaining | integer | 2 | Vistas restantes antes de la expiración |
Ejemplo de solicitud
curl -X GET https://us.pwpush.com/api/v2/pushes/fkwjfvhall92
Ejemplo de solicitud con frase de contraseña
curl -X GET "https://us.pwpush.com/api/v2/pushes/fkwjfvhall92?passphrase=your_passphrase"
Ejemplo de respuesta
{
"expire_after_duration": 6,
"expire_after_views": 3,
"expired": false,
"url_token": "fkwjfvhall92",
"deletable_by_viewer": false,
"retrieval_step": false,
"expired_on": null,
"passphrase": null,
"created_at": "2025-02-17T10:00:00.000Z",
"updated_at": "2025-02-17T10:00:00.000Z",
"expire_after_days": 1,
"views_remaining": 2,
"deleted": false,
"days_remaining": 1,
"expires_at": "2025-02-18T10:00:00.000Z",
"expires_in": 86400,
"json_url": "https://us.pwpush.com/p/fkwjfvhall92.json",
"html_url": "https://us.pwpush.com/p/fkwjfvhall92",
"payload": "MySecretPassword123",
"files": []
}
Nota: Si el push tiene una frase de contraseña, inclúyala como parámetro de consulta: ?passphrase=your_passphrase. Recuperar un push cuenta como una vista y puede caducar el push si alcanza su límite de vistas.
GET /api/v2/pushes/:url_token/preview
Devuelve la URL secreta completa de un push sin recuperar la carga útil.
Ejemplo de solicitud
curl -X GET https://us.pwpush.com/api/v2/pushes/fkwjfvhall92/preview
Ejemplo de respuesta
{
"url": "https://us.pwpush.com/p/fkwjfvhall92"
}
GET /api/v2/pushes/:url_token/audit
Devuelve el registro de auditoría de un push. Requiere autenticación y propiedad.
Parámetros de consulta:
page (opcional): Número de página para la paginación.
- Por defecto:
1(primera página) - Alcance:
1a200 - Devuelve hasta 50 entradas de registro de auditoría por página
- Por ejemplo:
?page=2para recuperar la segunda página
Ejemplo de solicitud
curl -X GET https://us.pwpush.com/api/v2/pushes/fkwjfvhall92/audit \
-H "Authorization: Bearer YOUR_API_TOKEN"
Ejemplo de respuesta
{
"logs": [
{
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"referrer": null,
"kind": "creation",
"created_at": "2023-10-27T10:00:00.000Z",
"updated_at": "2023-10-27T10:00:00.000Z"
},
{
"ip": "192.168.1.101",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"referrer": "https://example.com",
"kind": "view",
"created_at": "2023-10-27T10:05:00.000Z",
"updated_at": "2023-10-27T10:05:00.000Z"
}
]
}
Nota: En kind indica el tipo de acción registrada. Los valores más comunes son: creation, view, expire, failed_passphrase, y failed_view.
DELETE /api/v2/pushes/:url_token
Expira inmediatamente un push y borra permanentemente todos los datos sensibles, incluyendo la carga útil y cualquier archivo adjunto. Esta acción es irreversible y no puede deshacerse. Requiere autenticación y propiedad, o el push debe haber sido creado con deletable_by_viewer: true.
Ejemplo de solicitud
curl -X DELETE https://us.pwpush.com/api/v2/pushes/fkwjfvhall92 \
-H "Authorization: Bearer YOUR_API_TOKEN"
Ejemplo de respuesta
{
"expire_after_duration": 7,
"expire_after_views": 5,
"expired": true,
"url_token": "fkwjfvhall92",
"deletable_by_viewer": false,
"retrieval_step": false,
"expired_on": "2023-10-27T10:15:00.000Z",
"passphrase": null,
"created_at": "2023-10-27T10:00:00.000Z",
"updated_at": "2023-10-27T10:15:00.000Z",
"expire_after_days": 7,
"days_remaining": 0,
"expires_at": null,
"expires_in": 0,
"views_remaining": 0,
"deleted": true,
"json_url": "https://us.pwpush.com/p/fkwjfvhall92.json",
"html_url": "https://us.pwpush.com/p/fkwjfvhall92",
"account_id": 1,
"note": null,
"name": null
}
GET /api/v2/pushes/active
Devuelve una lista paginada de sus pulsaciones activas (no caducadas). Requiere autenticación.
GET /api/v2/pushes/expired
Devuelve una lista paginada de sus pulsaciones caducadas. Requiere autenticación.
Parámetros de consulta:
page (opcional): Número de página para la paginación.
- Por defecto:
1(primera página) - Alcance:
1a200 - Devuelve hasta 50 pulsaciones por página
- Por ejemplo:
?page=2para recuperar la segunda página
Ejemplo de solicitud (activa)
curl -X GET https://us.pwpush.com/api/v2/pushes/active \
-H "Authorization: Bearer YOUR_API_TOKEN"
Ejemplo de solicitud (expirado)
curl -X GET https://us.pwpush.com/api/v2/pushes/expired \
-H "Authorization: Bearer YOUR_API_TOKEN"
Ejemplo de respuesta
[
{
"expire_after_duration": 7,
"expire_after_views": 5,
"expired": false,
"url_token": "abc123xyz789",
"deletable_by_viewer": false,
"retrieval_step": false,
"expired_on": null,
"passphrase": null,
"created_at": "2023-10-27T10:00:00.000Z",
"updated_at": "2023-10-27T10:00:00.000Z",
"expire_after_days": 7,
"days_remaining": 7,
"expires_at": "2023-10-29T10:00:00.000Z",
"expires_in": 172800,
"views_remaining": 5,
"deleted": false,
"json_url": "https://us.pwpush.com/p/abc123xyz789.json",
"html_url": "https://us.pwpush.com/p/abc123xyz789",
"account_id": 1,
"note": null,
"name": null
},
{
"expire_after_duration": 1,
"expire_after_views": 3,
"expired": false,
"url_token": "def456uvw012",
"deletable_by_viewer": true,
"retrieval_step": false,
"expired_on": null,
"passphrase": null,
"created_at": "2023-10-26T15:30:00.000Z",
"updated_at": "2023-10-26T15:30:00.000Z",
"expire_after_days": 1,
"days_remaining": 0,
"expires_at": "2023-10-26T16:00:00.000Z",
"expires_in": 1200,
"views_remaining": 2,
"deleted": false,
"json_url": "https://us.pwpush.com/p/def456uvw012.json",
"html_url": "https://us.pwpush.com/p/def456uvw012",
"account_id": 1,
"note": null,
"name": null
}
]
Última actualización: July 20, 2026