Documentación

Publicar

Una petición, todas las redes. Cada destino puede llevar su propio texto, medios y opciones.

Ahora

POST /v1/posts
curl -X POST "https://api.usecrier.com/v1/posts" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Lanzamos la colección de otoño 🍂",
    "targets": [
      {
        "accountId": "acc_ig"
      },
      {
        "accountId": "acc_li"
      }
    ]
  }'

Programado

Añade scheduledFor en ISO 8601 con zona horaria.

POST /v1/posts
curl -X POST "https://api.usecrier.com/v1/posts" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Abrimos el viernes a las 9",
    "scheduledFor": "2026-10-30T09:00:00+01:00",
    "targets": [
      {
        "accountId": "acc_ig"
      }
    ]
  }'

Puedes cancelarla antes de que salga con POST /v1/posts/{id}/cancel.

En la cola

Con queue: true toma el siguiente hueco libre de la cola del perfil. Todas las cuentas tienen que ser del mismo perfil.

POST /v1/posts
curl -X POST "https://api.usecrier.com/v1/posts" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Consejo del día",
    "queue": true,
    "targets": [
      {
        "accountId": "acc_ig"
      }
    ]
  }'

Borrador

Con draft: true se guarda sin publicar ni programar.

Texto y medios por red

Cada destino puede sustituir el texto (content) y los medios (media) del post, y llevar las opciones de su red con la clave de la red (instagram, youtube, tiktok…). Mira Opciones por red.

POST /v1/posts
curl -X POST "https://api.usecrier.com/v1/posts" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Así se hace nuestra chaqueta",
    "media": [
      {
        "type": "video",
        "url": "https://cdn.acme.com/chaqueta.mp4"
      }
    ],
    "targets": [
      {
        "accountId": "acc_ig",
        "instagram": {
          "format": "reel",
          "firstComment": "#otoño #moda"
        }
      },
      {
        "accountId": "acc_yt",
        "youtube": {
          "title": "Así se hace nuestra chaqueta",
          "visibility": "public"
        }
      },
      {
        "accountId": "acc_x",
        "content": "Así se hace nuestra chaqueta 🧵",
        "x": {
          "thread": [
            "1/ Empieza en el taller…"
          ]
        }
      }
    ]
  }'

Estados

EstadoQué significa
draftBorrador, sin fecha.
pending_approvalEsperando a que un propietario o admin la apruebe. No sale hasta entonces.
scheduledProgramada o en la cola, esperando su hora.
publishingSe está enviando a las redes.
publishedPublicada en todas. Cada destino tiene su url.
partialPublicada en algunas y fallida en otras. Reintenta las fallidas con POST /v1/posts/{id}/retry.
failedNo salió en ninguna. Cada destino explica el motivo en error.
cancelledCancelada antes de salir, o retirada de todas las redes.

Editar

Mientras no ha salido (borrador, programada, con error o cancelada) puedes cambiar cualquier cosa con PATCH /v1/posts/{id}. Lo que no envíes se mantiene; targets sustituye la lista entera.

PATCH /v1/posts/pst_7q1w0e
curl -X PATCH "https://api.usecrier.com/v1/posts/pst_7q1w0e" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Abrimos el viernes a las 10",
    "scheduledFor": "2026-10-30T10:00:00+01:00"
  }'

Con draft: false un borrador se publica: ahora, en scheduledFor o en la cola.

Una vez publicada, solo se puede cambiar el texto, y solo en las redes que lo permiten: X (cuentas Premium, durante la primera hora), Facebook, LinkedIn, YouTube, Pinterest, Google Business, Telegram, Discord y Reddit.

POST /v1/posts/pst_7q1w0e/edit
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/edit" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Texto corregido"
  }'

Aprobación

Con requiresApproval: true la publicación queda en pending_approval: no sale hasta que alguien la apruebe. Si el workspace exige aprobación (PATCH /v1/workspace con requireApproval: true, o desde Equipo en el panel), las de los miembros pasan siempre por aquí. Las de propietarios, admins y API keys no, salvo que lo pidan.

POST /v1/posts
curl -X POST "https://api.usecrier.com/v1/posts" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Nueva colección",
    "scheduledFor": "2026-11-06T09:00:00+01:00",
    "requiresApproval": true,
    "targets": [
      {
        "accountId": "acc_ig"
      }
    ]
  }'

Un propietario, un admin o una API key decide con POST /v1/posts/{id}/review. Al aprobarla se programa para su fecha, entra en la cola si la pidió o sale ya si su fecha pasó mientras esperaba. Al rechazarla vuelve a borrador con la nota, y tu webhook recibe post.rejected.

POST /v1/posts/pst_7q1w0e/review
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/review" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decision": "reject",
    "note": "Cambia la foto de portada"
  }'

Editarla mientras espera no la publica: sigue pendiente. Quien la escribió puede retirarla con POST /v1/posts/{id}/cancel.

Reciclar

Una publicación que funciona puede volver a salir sola: cada N semanas o meses, como una publicación nueva. Para cuando llega a maxCopies o pasa until, y las variations se usan por turnos para que no salga siempre el mismo texto.

PUT /v1/posts/pst_7q1w0e/recycling
curl -X PUT "https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "every": 2,
    "unit": "month",
    "maxCopies": 6,
    "variations": [
      "Vuelve el clásico de otoño 🍂",
      "Por si te lo perdiste: nuestro clásico de otoño"
    ]
  }'

Métricas

GET /v1/posts/{id}/metrics devuelve impresiones, alcance, reproducciones, me gusta, comentarios, compartidos, guardados y clics, en total y por cuenta. Llegan unos minutos después de publicar; hasta entonces devuelve null. Cada red da solo las suyas: las demás valen 0.

Grupos de cuentas

Guarda selecciones de cuentas (por ejemplo, "Todas las de Acme") con POST /v1/account-groups y úsalas al importar un CSV o desde el panel.

POST /v1/account-groups
curl -X POST "https://api.usecrier.com/v1/account-groups" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Todas las de Acme",
    "accountIds": [
      "acc_ig",
      "acc_li",
      "acc_x"
    ]
  }'

Retirar y borrar

🚧 Aún no está listo

Estamos terminando de construirlo

Crier está en acceso anticipado. Déjanos tu email y serás de los primeros en entrar, con condiciones de lanzamiento.

o con tu email

Sin spam. Solo te escribiremos para darte acceso.

¡Estás en la lista!

Te escribiremos en cuanto tu acceso esté listo.