Por Sorsa Editorial

Publicado en junio de 2026. Actualizado en julio de 2026: agregada la opción inicial de 100 solicitudes gratis y refrescado el precio de Sorsa a las tarifas por lotes por cada 1,000. Refleja el precio de pago por uso vigente de X (incluidos los cambios de costo de escritura de abril de 2026) y el estado de las herramientas de PHP, donde X publica SDKs oficiales solo para Python y TypeScript, no para PHP.

Conclusión clave: No hay un SDK oficial de la API de X (Twitter) para PHP en 2026; X publica SDKs oficiales solo para Python y TypeScript. Las vías prácticas en PHP son una librería de comunidad como twitteroauth, cURL o Guzzle simple con un bearer token, o una API REST de terceros de solo lectura.

Si buscaste "twitter api php" esperando un paquete oficial y con soporte, no lo hay. X publicó SDKs de primera parte para Python y TypeScript a finales de 2025 y dejó PHP a la comunidad. La mayoría de los tutoriales de PHP que rankean para esta consulta enseñan a publicar por OAuth, o usan los viejos endpoints v1.1 que X retiró, contra un precio que ya no existe.

Nosotros construimos y operamos Sorsa API, una API alternativa de Twitter/X, y la vía de solo lectura encaja con PHP de forma limpia: devuelve perfiles, tweets, resultados de búsqueda y seguidores como JSON que json_decode convierte en un arreglo simple, con una clave API en el encabezado ApiKey, sin flujo OAuth y sin aprobación de cuenta de desarrollador que esperar. En trabajo intensivo en lecturas resulta hasta 50 veces más barata que la API oficial de X, mantiene 20 solicitudes por segundo en todos los planes, y sale desde $0.02 por cada 1,000 tweets y desde $0.01 por cada 1,000 perfiles en endpoints por lotes, en planes de tarifa plana desde $49 al mes por 10,000 solicitudes. Puedes empezar con 100 solicitudes gratis, sin tarjeta, cubriendo los 40 endpoints. No todo proyecto encaja en ese molde: unos necesitan publicar, y otros necesitan la API oficial por cumplimiento. Esta guía cubre cada vía de PHP con código funcional (cURL, Guzzle y WordPress), precio vigente y un recolector que pagina y reintenta. También puedes probar llamadas sin escribir código en el playground.

Contenido


Qué cambió: la API de X y las herramientas de PHP en 2026 {#what-changed-the-x-api-and-php-tooling-in-2026}

Tres cosas cambiaron para quienes desarrollan en PHP desde que se escribieron los tutoriales viejos. La API de X pasó al cobro de pago por uso sin nivel gratuito y cobra por recurso leído. Escribir se encareció tras la actualización de abril de 2026. Y X publicó sus primeros SDKs oficiales, pero solo para Python y TypeScript, así que quienes desarrollan en PHP todavía dependen de librerías de comunidad o de HTTP crudo.

El pago por uso es lo predeterminado. No hay nivel gratuito ni plan Basic mensual para registros nuevos. Compras créditos y pagas por recurso: $0.005 por lectura de post, $0.010 por perfil de usuario y $0.010 por cada registro de seguidor o seguido. Leer los datos de tu propia cuenta cuesta $0.001 por recurso, y las cuentas estándar tienen tope de 2 millones de lecturas de posts al mes. Los números detrás de un presupuesto real están en nuestro desglose de precios de la API de X y la explicación de por qué subió el precio de la API de X.

Escribir se encareció. Tras la actualización de abril de 2026, un post estándar cuesta $0.015 por solicitud y un post que contiene una URL cuesta $0.20. Las acciones de follow, like y cita de post se quitaron de los niveles de autoservicio y ahora requieren un contrato Enterprise.

Los SDKs oficiales llegaron solo para Python y TypeScript. A finales de 2025 X anunció SDKs de primera parte para esos dos lenguajes. No hay SDK oficial de PHP. Las librerías de comunidad llenan el hueco, y la más usada sigue siendo twitteroauth, que admite los endpoints v2 una vez que fijas la versión de la API.

La mayoría de los ejemplos de PHP en línea están rancios. Una buena parte enseña llamadas v1.1 como statuses/update o search/tweets, que X retiró, o se enfocan solo en publicar. Leer datos públicos por v2 es otra vía, y es la que toma esta guía.


La mejor librería de PHP para la API de X {#the-best-php-library-for-the-x-api}

Para la mayoría de los proyectos de PHP, twitteroauth sigue siendo la opción por defecto: es el cliente de PHP más usado, se instala por Composer y alcanza los endpoints v2 con setApiVersion('2') más llamadas genéricas get y post. Está en modo mantenimiento (sin desarrollo de funciones nuevas), pero funciona. Para un wrapper nativo de v2, paquetes de comunidad como twitter-api-v2-php y bird-elephant apuntan a la API v2 directamente. Para recolección de datos de solo lectura, muchos equipos se saltan las librerías y llaman a una API REST de terceros con cURL o Guzzle simple, que elimina OAuth por completo.

Así se comparan las opciones principales.

Librería / herramientaVersión de APIIdeal paraNotas
twitteroauthv1.1 y v2La mayoría de los proyectos, uso más amplioInstalación por Composer. Alcanza v2 por setApiVersion y get/post genéricos. En modo mantenimiento, pero funcional.
twitter-api-v2-phpv2Acceso moderno nativo de v2Wrapper enfocado en endpoints v2. Comunidad más chica que twitteroauth.
bird-elephantv2Cobertura de endpoints v2Cliente de PHP de comunidad para la API v2.
cURL o Guzzle (sin wrapper)cualquieraDependencias mínimas, control totalTú construyes las solicitudes y la paginación. Se lleva bien con una API de terceros.
API REST de solo lecturan/aRecolección de datos intensiva en lecturasUna clave en un encabezado, sin OAuth, cobro de tarifa plana por solicitud. Solo lectura.

Cualquiera que sea la librería que elijas para la API oficial, el costo es idéntico, porque X cobra por recurso de su lado, no por librería. La variable que controlas es cuántos recursos extraes, que es donde los endpoints por lotes y una API de tarifa plana cambian las cuentas.


¿Qué enfoque deberías usar? {#which-approach-should-you-use}

Elige la vía antes de escribir código. Para leer y escribir contra la API v2 con la librería más común, usa twitteroauth. Para datos de solo lectura a volumen con configuración mínima, una API REST de terceros elimina OAuth y la cola de aprobación. Para control total sin wrapper, cURL o Guzzle simple alcanza. La decisión es en su mayoría lectura contra escritura, y cuánto volumen extraes.

Si necesitas...Usa...
Leer y escribir con una librería populartwitteroauth
Datos de solo lectura a escala, configuración mínimaUna API REST de terceros de solo lectura
Control total, sin wrappercURL o Guzzle simple con un bearer token
Publicar, dar like o seguirtwitteroauth o la API oficial (OAuth requerido)

Si tu proyecto solo lee datos públicos, una API de terceros elimina el flujo OAuth: una clave en un encabezado y empiezas a extraer datos, sin solicitud de cuenta de desarrollador y sin compra de créditos. Si necesitas publicar o correr acciones de escritura, la API oficial a través de twitteroauth es la vía; ningún proveedor de terceros publica en tu nombre. ¿Trabajas en otro lenguaje? Consulta la versión en Python de esta guía.


Método 1: una librería de comunidad (twitteroauth) {#method-1-a-community-library-twitteroauth}

twitteroauth es el cliente de PHP más usado para la API de X. Se instala por Composer, maneja la autenticación y alcanza los endpoints v2 una vez que llamas a setApiVersion('2'). Para leer datos públicos, un bearer token de solo app alcanza.

Instálalo:

bash
composer require abraham/twitteroauth

Construye una conexión de solo app y busca los últimos siete días:

php
<?php
require 'vendor/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

// App-only auth: API key, API secret, null, bearer token
$connection = new TwitterOAuth(
    getenv('X_API_KEY'),
    getenv('X_API_SECRET'),
    null,
    getenv('X_API_BEARER_TOKEN')
);
$connection->setApiVersion('2');

$tweets = $connection->get('tweets/search/recent', [
    'query'        => 'php lang:en',
    'max_results'  => 20,
    'tweet.fields' => 'created_at,public_metrics',
]);

foreach ($tweets->data as $tweet) {
    echo $tweet->text . "\n";
}

Consulta un perfil por la misma llamada genérica get:

php
$user = $connection->get('users/by/username/elonmusk', [
    'user.fields' => 'public_metrics,created_at',
]);

printf(
    "@%s has %d followers\n",
    $user->data->username,
    $user->data->public_metrics->followers_count
);

twitteroauth devuelve objetos decodificados, así que el texto de un tweet es $tweet->text y las métricas de un perfil son $user->data->public_metrics. Los mismos métodos get y post alcanzan cualquier endpoint v2 por ruta, incluidos seguidores (users/:id/followers) y cronologías (users/:id/tweets). Es la elección correcta cuando quieres la opción de PHP más documentada y también puedes escribir. Las contrapartidas: está en modo mantenimiento en lugar de desarrollo activo, todavía necesitas una cuenta de desarrollador de X de pago, y pagas el precio por recurso de X en cada llamada.


Método 2: cURL o Guzzle simple con un bearer token {#method-2-plain-curl-or-guzzle-with-a-bearer-token}

Sin librería, sin wrapper. La extensión cURL integrada de PHP, o el cliente HTTP Guzzle, pueden llamar a la API de X v2 directamente con un bearer token en el encabezado Authorization. Esta vía conviene a quienes quieren control total sobre las solicitudes, o prefieren evitar una dependencia específica de Twitter.

Consulta un perfil con cURL:

php
<?php
$ch = curl_init('https://api.x.com/2/users/by/username/elonmusk?user.fields=public_metrics');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . getenv('X_API_BEARER_TOKEN'),
]);

$response = curl_exec($ch);
curl_close($ch);

$user = json_decode($response, true);
printf(
    "@%s has %d followers\n",
    $user['data']['username'],
    $user['data']['public_metrics']['followers_count']
);

La API oficial pagina la búsqueda con un next_token en el meta de la respuesta. Recorre cada resultado con un guardián para que una consulta amplia no agote tu cuota:

php
<?php
function searchRecent(string $token, string $query, int $maxPages = 10): array
{
    $all = [];
    $nextToken = null;
    $pages = 0;

    do {
        $params = [
            'query'        => $query,
            'max_results'  => 100,
            'tweet.fields' => 'created_at,public_metrics',
        ];
        if ($nextToken) {
            $params['next_token'] = $nextToken;
        }

        $url = 'https://api.x.com/2/tweets/search/recent?' . http_build_query($params);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $token]);
        $response = curl_exec($ch);
        curl_close($ch);

        $body = json_decode($response, true);
        $all = array_merge($all, $body['data'] ?? []);
        $nextToken = $body['meta']['next_token'] ?? null;
        $pages++;
    } while ($nextToken && $pages < $maxPages);

    return $all;
}

Esto funciona cuando quieres dependencias mínimas o estás depurando el comportamiento de la API. La desventaja es que tú eres dueño de la paginación, el manejo de códigos de estado, el límite de tasa y los reintentos. Para un script puntual está bien; para una integración de producción terminas escribiendo un cliente pequeño. Esta vía todavía requiere una cuenta de desarrollador y créditos de pago por uso.


Método 3: una API REST de solo lectura {#method-3-a-read-only-rest-api}

Si una aplicación de PHP solo lee datos públicos de Twitter, una API REST de terceros se salta la API oficial por completo: sin OAuth, sin paso de solicitud, sin flujo de compra de créditos, solo una clave en un encabezado y JSON que decodifica directo a un arreglo.

Esta es la vía práctica para obtener datos de X sin una cuenta de desarrollador. Así se ve con Sorsa, usando nada más que cURL.

Obtén un perfil de usuario:

php
<?php
$ch = curl_init('https://api.sorsa.io/v3/info?username=elonmusk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ApiKey: ' . getenv('SORSA_API_KEY')]);

$response = curl_exec($ch);
curl_close($ch);

$user = json_decode($response, true);
echo "@{$user['username']} ({$user['display_name']}): {$user['followers_count']} followers\n";

Busca tweets con el conjunto completo de operadores web. El endpoint de búsqueda devuelve unos 20 tweets por página y un next_cursor para la siguiente:

php
<?php
$ch = curl_init('https://api.sorsa.io/v3/search-tweets');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'ApiKey: ' . getenv('SORSA_API_KEY'),
    'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'query' => 'php lang:en',
    'order' => 'latest',
]));

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
foreach ($data['tweets'] as $tweet) {
    echo "{$tweet['likes_count']} likes: {$tweet['full_text']}\n";
}

Extrae una lista de seguidores. Una solicitud devuelve hasta 200 perfiles, así que una cuenta de 1,000 seguidores son cinco solicitudes en lugar de diez páginas paginadas:

php
<?php
$ch = curl_init('https://api.sorsa.io/v3/followers?username=elonmusk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ApiKey: ' . getenv('SORSA_API_KEY')]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo 'Got ' . count($data['users']) . " followers in one request\n";

Si tu proyecto ya usa Guzzle, las mismas llamadas son más cortas. Trae hasta 100 tweets en una solicitud con el endpoint por lotes, que cuenta como una sola solicitud y devuelve objetos completos de tweets:

php
<?php
$client = new GuzzleHttp\Client();

$res = $client->post('https://api.sorsa.io/v3/tweet-info-bulk', [
    'headers' => ['ApiKey' => getenv('SORSA_API_KEY')],
    'json'    => ['tweet_links' => ['1782368585664626774', '1782368585664626775']],
]);

$data = json_decode((string) $res->getBody(), true);

Para consultas complejas, combina operadores como lo harías en la búsqueda avanzada; la lista completa está en nuestra referencia de operadores de búsqueda, y el endpoint alcanza hacia atrás el archivo completo de tweets. Cada respuesta de tweet carga el perfil del autor y las métricas públicas, así que extraer números de engagement o traer listas de seguidores no suma llamadas extra. El encabezado es ApiKey, la URL base es https://api.sorsa.io/v3, y los nombres de campo coinciden exactamente con la documentación de la API.


¿Hay un SDK oficial de PHP para la API de X? {#is-there-an-official-php-sdk-for-the-x-api}

No. A 2026 X publica SDKs oficiales solo para Python y TypeScript; no hay SDK oficial de PHP. La propia página de herramientas y librerías de X lista esos dos SDKs de primera parte más herramientas de desarrollo, y su generador de SDK de código abierto actualmente publica plantillas solo para Python y TypeScript.

Para PHP, eso deja las opciones cubiertas arriba: twitteroauth como el cliente más usado (v2 por setApiVersion), paquetes de comunidad nativos de v2 como twitter-api-v2-php y bird-elephant, cURL o Guzzle simple para control total, o una API de terceros de solo lectura para trabajo intensivo en lecturas. No hay un paquete de primera parte que preferir sobre estos, y el propio twitteroauth está en modo mantenimiento, así que pondera el mantenimiento a largo plazo al elegir.

Si algún día llega un SDK de PHP, probablemente se generaría a partir de la misma especificación OpenAPI que los de Python y TypeScript. Hasta entonces, trata cualquier tutorial que afirme un "SDK oficial de PHP" como inexacto.


Llamar a la API de X desde WordPress {#calling-the-x-api-from-wordpress}

Una buena parte del PHP que toca la API de X corre dentro de WordPress, y no necesitas un plugin ni una librería externa. WordPress trae su propia HTTP API, así que wp_remote_get puede llamar a cualquier endpoint REST y pasar el encabezado de autenticación directamente. Para datos de solo lectura, eso significa una función y sin OAuth.

php
<?php
// In a theme's functions.php or a small plugin
$response = wp_remote_get('https://api.sorsa.io/v3/info?username=elonmusk', [
    'headers' => ['ApiKey' => getenv('SORSA_API_KEY')],
    'timeout' => 15,
]);

if (is_wp_error($response)) {
    return;
}

$user = json_decode(wp_remote_retrieve_body($response), true);
echo esc_html("@{$user['username']}: {$user['followers_count']} followers");

El mismo patrón funciona contra la API oficial cambiando la URL y usando un encabezado Authorization con un bearer token en lugar del encabezado ApiKey. Cachea el resultado con la Transients API de WordPress (set_transient) para que una carga de página no golpee la API en cada vista, lo que a la vez acelera la página y mantiene bajo el volumen de solicitudes. Para un widget de solo lectura como un conteo de seguidores o un bloque de tweets recientes, esta es toda la integración.


Construir un recolector de datos en PHP {#building-a-data-collector-in-php}

Un recolector de producción necesita tres cosas más allá de una sola llamada: paginación por cursor para pasar de la primera página, un guardián de páginas para que una consulta amplia no agote tu cuota, y un reintento ante límites de tasa. Aquí hay un recolector de solo lectura completo contra el endpoint de búsqueda, paginando con next_cursor y retrocediendo ante un 429.

php
<?php
function collectTweets(string $apiKey, string $query, int $maxPages = 20): array
{
    $collected = [];
    $cursor = null;
    $pages = 0;

    while ($pages < $maxPages) {
        $payload = ['query' => $query, 'order' => 'latest'];
        if ($cursor) {
            $payload['next_cursor'] = $cursor;
        }

        $ch = curl_init('https://api.sorsa.io/v3/search-tweets');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'ApiKey: ' . $apiKey,
            'Content-Type: application/json',
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

        $response = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        // Flat 20 requests per second limit: on a 429, wait a second and retry
        if ($status === 429) {
            sleep(1);
            continue;
        }

        $data = json_decode($response, true);
        $collected = array_merge($collected, $data['tweets'] ?? []);

        $cursor = $data['next_cursor'] ?? null;
        $pages++;
        if (!$cursor) {
            break;
        }
    }

    return $collected;
}

Cuando reconstruimos nuestros propios recolectores, un límite fijo por segundo resultó más simple de ritmar que las ventanas por endpoint: esperas un segundo ante un 429 en lugar de rastrear una marca de tiempo de reinicio por endpoint. La mecánica de los cursores se cubre en la guía de paginación, y el lado oficial está en nuestra referencia de límites de tasa de la API de X. Si necesitas lecturas paralelas, el pool de Guzzle te deja correr varias solicitudes a la vez mientras acotas la concurrencia para mantenerte dentro del límite. El mismo bucle cambia a /user-tweets o /followers cambiando el endpoint y el payload.


Comparación: tres vías, lado a lado {#comparison-three-routes-side-by-side}

Las tres vías de PHP se dividen en dos ejes: si puedes escribir, y cómo te cobran. Ambas vías de la API oficial necesitan una cuenta de desarrollador y cobran por recurso. Una API de solo lectura cambia el acceso de escritura por una sola clave y cobro de tarifa plana por solicitud.

VíaConfiguraciónAutenticaciónLecturasEscriturasCobro
twitteroauth (librería de comunidad)Cuenta de desarrollador, créditosBearer / OAuthPor recurso
cURL o Guzzle simpleCuenta de desarrollador, créditosBearer / OAuthPor recurso
API REST de solo lecturaClave API, unos 3 minutosUn único encabezado ApiKeyNo (solo lectura)Tarifa plana por solicitud

La división te dice cuál elegir: si necesitas publicar o correr acciones de escritura, ese es territorio de la API oficial a través de twitteroauth. Para acceso intensivo en lecturas a un precio de tarifa plana y predecible, una API de solo lectura es la vía más barata y simple, y devuelve los mismos datos públicos.

La brecha de costo en lecturas viene de la unidad de cobro. La API oficial cobra por cada post y cada perfil de autor en una respuesta; una API de tarifa plana cobra una solicitud sin importar cuántos elementos devuelva.

CargaAPI oficial de XAPI de solo lectura (Sorsa Pro)
Búsqueda que devuelve 20 tweets, con datos de autor$0.30 (20 x $0.005 más 20 x $0.010)Una solicitud, unos $0.002 (autores incluidos)
1,000 perfiles de seguidoresUnos $10 (por perfil)Unos $0.01 (5 solicitudes a 200 por página)
100 tweets por ID, con datos de autor$1.50 (100 x $0.005 más 100 x $0.010)Una solicitud, unos $0.002 (endpoint por lotes)
Tope mensual2 millones de lecturas de postsPor plan (10,000 a 500,000 solicitudes)
Límite de tasa300 a 900 por cada 15 minutos (varía)20 solicitudes por segundo

Para trabajo intensivo en lecturas el modelo por recurso es la forma cara de hacer un trabajo simple, y por eso una tarifa plana por solicitud gana en cuanto cruzas unas 10,000 lecturas al mes. Las escrituras son la excepción: publicar y los DMs viven solo en la API oficial, así que una integración pesada en escrituras pertenece ahí sin importar el costo de lectura.


Cómo obtener tus credenciales de API {#how-to-get-your-api-credentials}

Para la API oficial, crea una cuenta de desarrollador en developer.x.com, acepta los términos de desarrollador, describe tu caso de uso y crea un Project y una App para generar una clave API, un API secret y un bearer token. Compra créditos antes de tu primera llamada, porque no hay nivel gratuito. Para una API de terceros de solo lectura, regístrate, genera una clave y pásala en un encabezado, sin paso de solicitud ni aprobación.

Lee cualquiera de las credenciales desde el entorno, nunca desde el código fuente:

bash
# .env or your server environment
X_API_KEY=your-x-api-key
X_API_SECRET=your-x-api-secret
X_API_BEARER_TOKEN=your-x-bearer-token
SORSA_API_KEY=your-sorsa-api-key

En PHP, léelas con getenv como se muestra arriba, o carga un archivo .env en desarrollo con un paquete como vlucas/phpdotenv. Si estás portando código existente de la API oficial, la guía de migración mapea los endpoints oficiales y los nombres de campo a sus equivalentes de tarifa plana para que cambies el transporte sin reescribir la lógica.


En la práctica: recortar el costo de una integración en PHP {#in-practice-cutting-the-cost-of-a-php-integration}

Una agencia de unas 12 personas llegó a nosotros corriendo un panel de cliente basado en WordPress que extraía datos de cuentas rastreadas por twitteroauth en la API oficial. El código funcionaba, pero cada refresco del panel pagaba por lectura de post y por perfil de autor, el manejo del token OAuth sumaba piezas móviles, y el tope mensual de 2 millones de lecturas de posts significaba que vigilaban el volumen a medida que sumaban clientes.

El arreglo fue un cambio de transporte, no una reescritura. Conservaron el lado de WordPress y el renderizado, apuntaron las solicitudes a los endpoints de búsqueda y /followers, y dejaron OAuth por un único encabezado ApiKey leído por wp_remote_get. Como cada solicitud devuelve hasta 20 tweets o 200 perfiles de seguidores en lugar de cobrar por recurso, el mismo refresco costó una fracción de lo que costaba, hasta 50 veces más barato en las partes intensivas en lecturas, y un límite por segundo reemplazó al tope mensual como lo único contra lo que ritmar. Cachearon las respuestas con transients, así que la mayoría de las cargas de página no golpean la API en absoluto. Para una carga de solo lectura, el modelo por recurso había sido la forma cara de hacer un trabajo simple.


Preguntas frecuentes {#faq}

¿Hay un SDK oficial de la API de X (Twitter) para PHP?

No. A 2026 X publica SDKs oficiales solo para Python y TypeScript; no hay SDK oficial de PHP. El cliente de PHP más usado es twitteroauth, que alcanza los endpoints v2 por setApiVersion y los métodos genéricos get y post, aunque está en modo mantenimiento. También existen paquetes de comunidad nativos de v2 más nuevos como twitter-api-v2-php y bird-elephant, así que trata cualquier afirmación de "SDK oficial de PHP" como inexacta.

¿Cuál es la mejor librería de PHP para la API de Twitter?

Para la mayoría de los proyectos, twitteroauth es la opción por defecto práctica: es el cliente de PHP más usado, se instala por Composer y admite v2 una vez que fijas la versión de la API, aunque está en modo mantenimiento. Para código nativo de v2, twitter-api-v2-php y bird-elephant apuntan a los endpoints v2 directamente. Para datos de solo lectura a volumen, muchos equipos de PHP se saltan las librerías y llaman a una API REST de terceros con cURL o Guzzle simple.

¿Cómo obtener tweets en PHP sin una cuenta de desarrollador?

Llama a una API REST de terceros de solo lectura. Con Sorsa, te registras, obtienes una clave API, la pasas en el encabezado ApiKey y envías una solicitud con cURL o Guzzle; json_decode convierte la respuesta en un arreglo simple. No hay flujo OAuth, ni revisión de app, ni compra de créditos, y cada respuesta de tweet incluye el perfil del autor y las métricas públicas, así que una sola solicitud devuelve datos completos.

¿Cuánto cuesta la API de X para una app de PHP en 2026?

En la API oficial de X pagas por recurso: $0.005 por lectura de post, $0.010 por perfil de usuario, $0.015 por post estándar y $0.20 por un post con URL, con un tope mensual de 2 millones de lecturas de posts. Una búsqueda que devuelve 20 tweets cuesta $0.30 una vez incluidos los perfiles de autor. Sorsa cobra por solicitud, lo que sale desde $0.02 por cada 1,000 tweets y desde $0.01 por cada 1,000 perfiles en endpoints por lotes, en planes de tarifa plana desde $49 al mes por 10,000 solicitudes, y 100 solicitudes gratis te dejan probar antes de pagar. Cada solicitud devuelve hasta 20 tweets o 200 perfiles de seguidores.

¿Puedes llamar a la API de X desde WordPress?

Sí, y no necesitas un plugin. WordPress trae una HTTP API, así que wp_remote_get puede llamar a la API de X o a una API de terceros y pasar el encabezado de autenticación directamente: un bearer token para la API oficial, o un encabezado ApiKey para un proveedor de solo lectura. Decodifica el cuerpo con json_decode y cachéalo con la Transients API para que una carga de página no golpee la API en cada vista.

¿Cómo manejar los límites de tasa de la API de X en PHP?

La API oficial limita las solicitudes por ventana de 15 minutos (típicamente 300 a 900 según el endpoint) y devuelve un 429 cuando llegas a uno. Con cURL o Guzzle revisas el código de estado y esperas antes de reintentar. Una API de tarifa plana como Sorsa usa un límite por segundo de 20 solicitudes, así que ante un 429 esperas un segundo y reintentas la misma llamada, y el pool de Guzzle te deja acotar la concurrencia para lecturas paralelas.

¿twitteroauth admite la API de X v2?

Sí. twitteroauth alcanza los endpoints v2 una vez que llamas a setApiVersion con el valor 2, y luego usas los métodos genéricos get y post con rutas v2 como tweets/search/recent. Un bearer token de solo app alcanza para leer datos públicos. Sí requiere una cuenta de desarrollador de X de pago, y la librería está en modo mantenimiento, así que no hay funciones nuevas planeadas.


Cómo empezar {#getting-started}

Elige una vía y corre uno de los ejemplos de arriba.

  • Datos de solo lectura: toma una clave del panel de Sorsa, fíjala como SORSA_API_KEY y corre cualquier ejemplo del Método 3. Empiezas con 100 solicitudes gratis, sin tarjeta, cubriendo los 40 endpoints, así que puedes probar antes de elegir un plan. Los datos estructurados de X aterrizan en tu script en menos de un minuto, y el inicio rápido recorre la primera llamada. Los planes y límites están en la página de precios.
  • Leer y escribir: crea una cuenta de desarrollador en developer.x.com, compra créditos y corre los ejemplos de twitteroauth o cURL con tu bearer token.
  • Comparar proveedores: para una mirada más amplia a las opciones de solo lectura, consulta la comparación de alternativas a la API de Twitter, y para las contrapartidas del scraping administrado, nuestra guía de cómo scrapear X.

Revisado por Keksich, fundador de Sorsa, especialista en marketing e investigador de la API de X.

Cómo verificamos esta guía {#how-we-verified-this-guide}

Escribimos y verificamos esta guía en junio de 2026 mientras operábamos la API a diario. La ausencia de un SDK oficial de PHP y la existencia de los SDKs de Python y TypeScript se confirmaron contra la documentación de herramientas y librerías de X. El uso de twitteroauth con v2 (la construcción de bearer de solo app, setApiVersion y get/post genéricos contra rutas v2) y su estado en modo mantenimiento se revisaron contra su repositorio del proyecto. El precio de la API de X refleja el modelo de pago por uso vigente incluidos los cambios de costo de escritura de abril de 2026. El comportamiento de los endpoints de Sorsa, el agrupamiento por solicitud y el precio de los planes salen de la documentación de Sorsa API; más sobre el equipo en nuestra página Acerca de. Los números de versión de librerías se mueven, así que se describen en lugar de fijarse; para un precio vigente los docs dentro del producto son la fuente de verdad.