Referencia de la API
URL base https://api.usecrier.com/v1. Todas las respuestas van dentro de data.
Workspace
Tu workspace y quién está llamando.
/v1/meQuién llama
Respuesta 200
data
workspaceIdstringobligatoriouserobject | nullobligatorioNull si llamas con una API key.
user
userIdstringobligatorioemailstringopcional
rolestring | nullobligatorioEl rol de quien usa el panel; null con una API key.
curl "https://api.usecrier.com/v1/me" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/me', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/me",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/workspaceVer el workspace
Respuesta 200
data
idstringobligatorionamestringobligatoriousagestring | nullobligatoriorequireApprovalbooleanobligatorioLas publicaciones de los miembros esperan a que un propietario o admin las apruebe.
createdAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/workspace" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/workspace', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/workspace",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/workspaceEditar el workspace
Solo desde el panelCuerpo
namestringopcionalusagestringopcionalrequireApprovalbooleanopcionalLas publicaciones de los miembros esperan a que un propietario o admin las apruebe.
Respuesta 200
data
idstringobligatorionamestringobligatoriousagestring | nullobligatoriorequireApprovalbooleanobligatorioLas publicaciones de los miembros esperan a que un propietario o admin las apruebe.
createdAtstring (date-time)obligatorio
curl -X PATCH "https://api.usecrier.com/v1/workspace" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"usage": "api"
}'const res = await fetch('https://api.usecrier.com/v1/workspace', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"usage": "api"
}),
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/workspace",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"usage": "api"
},
)
data = res.json()["data"]Equipo
Miembros e invitaciones. Propietarios y admins gestionan el equipo; los miembros publican y responden.
/v1/teamVer miembros e invitaciones
Respuesta 200
data
membersobject[]obligatoriomembers
userIdstringobligatorioemailstringopcionalrolestringobligatoriojoinedAtstring (date-time)obligatorioyoubooleanobligatorio
invitationsobject[]obligatorioinvitations
idstringobligatorioemailstringobligatoriorolestringobligatoriocreatedAtstring (date-time)obligatorioexpiresAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/team" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/team', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/team",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/team/invitationsInvitar a alguien
Solo desde el panelDevuelve un enlace para enviarle. Se une al entrar con el email invitado.
Cuerpo
emailstring (email)obligatorioA quién invitas; tendrá que entrar con este email para aceptar.
rolestringopcionaladmingestiona el equipo, las API keys y los webhooks;memberpublica y responde.
Respuesta 201
data
invitationobjectobligatorioinvitation
idstringobligatorioemailstringobligatoriorolestringobligatoriocreatedAtstring (date-time)obligatorioexpiresAtstring (date-time)obligatorio
urlstring (uri)obligatorioEl enlace que hay que enviar. Solo se muestra ahora; vale 7 días.
curl -X POST "https://api.usecrier.com/v1/team/invitations" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/team/invitations', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/team/invitations",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/team/invitations/{id}Cancelar una invitación
Solo desde el panelParámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/team/invitations/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/team/invitations/key_2b4n6m', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/team/invitations/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/team/members/{userId}Cambiar un rol
Solo desde el panelParámetros
userIdstringobligatorio
Cuerpo
rolestringobligatorio
Respuesta 200
data
userIdstringobligatorioemailstringopcionalrolestringobligatoriojoinedAtstring (date-time)obligatorioyoubooleanobligatorio
curl -X PATCH "https://api.usecrier.com/v1/team/members/{userId}" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/team/members/{userId}', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/team/members/{userId}",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/team/members/{userId}Quitar a alguien, o salir
Solo desde el panelParámetros
userIdstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/team/members/{userId}" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/team/members/{userId}', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/team/members/{userId}",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/invitations/acceptAceptar una invitación
Solo desde el panelCuerpo
tokenstringobligatorioEl token del enlace de invitación.
Respuesta 200
data
workspaceIdstringobligatoriorolestringobligatorio
curl -X POST "https://api.usecrier.com/v1/invitations/accept" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/invitations/accept', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/invitations/accept",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]Perfiles
Un perfil es una marca o un cliente final. Las cuentas sociales se conectan a un perfil.
/v1/profilesListar perfiles
Respuesta 200
data []
idstringobligatorionamestringobligatoriotimezonestringopcionalexternalIdstringopcionalcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/profiles" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/profiles', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/profiles",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/profilesCrear un perfil
Cuerpo
namestringobligatorioNombre de la marca o del cliente final.
timezonestringopcionalZona horaria IANA, por ejemplo Europe/Madrid. La usa la cola.
externalIdstringopcionalTu propio id para este cliente; se devuelve tal cual.
Respuesta 201
data
idstringobligatorionamestringobligatoriotimezonestringopcionalexternalIdstringopcionalcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/profiles" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme",
"timezone": "Europe/Madrid",
"externalId": "customer-42"
}'const res = await fetch('https://api.usecrier.com/v1/profiles', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Acme",
"timezone": "Europe/Madrid",
"externalId": "customer-42"
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/profiles",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"name": "Acme",
"timezone": "Europe/Madrid",
"externalId": "customer-42"
},
)
data = res.json()["data"]/v1/profiles/{id}Ver un perfil
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatorionamestringobligatoriotimezonestringopcionalexternalIdstringopcionalcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/profiles/prf_8f2k4d" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/profiles/{id}Editar un perfil
Parámetros
idstringobligatorio
Cuerpo
namestringopcionalNombre de la marca o del cliente final.
timezonestringopcionalZona horaria IANA, por ejemplo Europe/Madrid. La usa la cola.
externalIdstringopcionalTu propio id para este cliente; se devuelve tal cual.
Respuesta 200
data
idstringobligatorionamestringobligatoriotimezonestringopcionalexternalIdstringopcionalcreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X PATCH "https://api.usecrier.com/v1/profiles/prf_8f2k4d" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Spain"
}'const res = await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Acme Spain"
}),
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"name": "Acme Spain"
},
)
data = res.json()["data"]/v1/profiles/{id}Borrar un perfil
También desconecta sus cuentas.
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/profiles/prf_8f2k4d" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)Cola
Huecos semanales por perfil. Los posts con queue: true toman el siguiente libre.
/v1/profiles/{id}/queueVer la cola de un perfil
Parámetros
idstringobligatorio
Respuesta 200
data
timezonestringobligatorioslotsobject[]obligatorioslots
dayOfWeekintegerobligatorio0 = domingo … 6 = sábado
timestringobligatorioHH:mm
nextSlotsstring (date-time)[]obligatorioLos próximos huecos libres, del más cercano al más lejano.
curl "https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/profiles/{id}/queueDefinir los huecos de la cola
Sustituye todos los huecos. Los días van de 0 (domingo) a 6 (sábado); las horas, HH:mm en la zona horaria de la cola.
Parámetros
idstringobligatorio
Cuerpo
timezonestringopcionalslotsobject[]obligatorioslots
dayOfWeekintegerobligatoriotimestringobligatorio
Respuesta 200
data
timezonestringobligatorioslotsobject[]obligatorioslots
dayOfWeekintegerobligatorio0 = domingo … 6 = sábado
timestringobligatorioHH:mm
nextSlotsstring (date-time)[]obligatorioLos próximos huecos libres, del más cercano al más lejano.
curl -X PUT "https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"timezone": "Europe/Madrid",
"slots": [
{
"dayOfWeek": 1,
"time": "09:00"
},
{
"dayOfWeek": 4,
"time": "18:00"
}
]
}'const res = await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"timezone": "Europe/Madrid",
"slots": [
{
"dayOfWeek": 1,
"time": "09:00"
},
{
"dayOfWeek": 4,
"time": "18:00"
}
]
}),
});
const { data } = await res.json();import os, requests
res = requests.put(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"timezone": "Europe/Madrid",
"slots": [
{
"dayOfWeek": 1,
"time": "09:00"
},
{
"dayOfWeek": 4,
"time": "18:00"
}
]
},
)
data = res.json()["data"]/v1/profiles/{id}/queueBorrar la cola
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/profiles/prf_8f2k4d/queue",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)Conexión
Conecta una cuenta social: manda al usuario a la URL y Crier lo devuelve a tu redirectUrl.
/v1/connect/{platform}Empezar a conectar una cuenta
Devuelve la URL a la que mandar al usuario. Al terminar, Crier vuelve a redirectUrl con connected=<platform>&accountId=…, con error=… si falló, o con select=<sessionId> cuando el usuario debe elegir página, organización, tablero, ficha o perfil (Facebook, LinkedIn, Pinterest, Google Business, Snapchat).
Parámetros
platformstringobligatorioprofileIdstringobligatorioEl perfil al que pertenecerá la cuenta.
redirectUrlstring (uri)obligatorioA dónde vuelve el usuario cuando termina la conexión.
Respuesta 200
data
urlstring (uri)obligatorioManda aquí al usuario para que autorice la red.
curl "https://api.usecrier.com/v1/connect/instagram?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconnected" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/connect/instagram?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconnected', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/connect/instagram?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconnected",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/connect/sessions/{id}/optionsListar lo que el usuario puede elegir
El id es el valor de select que Crier añadió a tu redirectUrl. Las sesiones caducan a la hora.
Parámetros
idstringobligatorio
Respuesta 200
data
platformstringobligatoriooptionsobject[]obligatoriooptions
idstringobligatorionamestringobligatoriodetailstringopcionalimageUrlstring (uri)opcional
curl "https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/options" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/options', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/options",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/connect/sessions/{id}/selectElegir una opción y terminar la conexión
Parámetros
idstringobligatorio
Cuerpo
optionIdstringobligatorio
Respuesta 201
data
idstringobligatorioprofileIdstringobligatorioplatformstringobligatoriousernamestringopcionaldisplayNamestringopcionalavatarUrlstring (uri)opcionalstatusstringobligatorioconnectedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/select" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"optionId": "1042…"
}'const res = await fetch('https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/select', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"optionId": "1042…"
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/connect/sessions/cs_5t2y8u/select",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"optionId": "1042…"
},
)
data = res.json()["data"]Cuentas
Cuentas sociales conectadas, si pueden publicar, y sus tableros, listas y subreddits.
/v1/accountsListar cuentas conectadas
Parámetros
profileIdstringopcional
Respuesta 200
data []
idstringobligatorioprofileIdstringobligatorioplatformstringobligatoriousernamestringopcionaldisplayNamestringopcionalavatarUrlstring (uri)opcionalstatusstringobligatorioconnectedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/accounts?profileId=prf_8f2k4d" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/accounts?profileId=prf_8f2k4d', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/accounts?profileId=prf_8f2k4d",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/accounts/healthComprobar si las cuentas pueden publicar
Pregunta a cada red en el momento. Las que necesitan reconexión pasan a needs_reconnection.
Parámetros
profileIdstringobligatorio
Respuesta 200
data []
accountIdstringobligatorioplatformstringobligatoriostatusstringobligatoriocanPostbooleanobligatorioneedsReconnectionbooleanobligatorioissuesstring[]obligatorio
curl "https://api.usecrier.com/v1/accounts/health?profileId=prf_8f2k4d" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/accounts/health?profileId=prf_8f2k4d', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/accounts/health?profileId=prf_8f2k4d",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/accounts/{id}/{kind}Listar tableros, listas de reproducción, subreddits o flairs
kind es pinterest-boards, youtube-playlists, reddit-subreddits o reddit-flairs (con subreddit). Usa los ids en las opciones del post.
Parámetros
idstringobligatoriokindstringobligatoriosubredditstringopcionalObligatorio para reddit-flairs.
Respuesta 200
data []
idstringobligatorioEnvíalo como boardId, playlistId, subreddit o flairId.
namestringobligatoriodetailstringopcionalisDefaultbooleanopcionalEl de la cuenta por defecto, que se usa si el post no elige otro.
curl "https://api.usecrier.com/v1/accounts/acc_3k9x2m/{kind}" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/accounts/acc_3k9x2m/{kind}', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/accounts/acc_3k9x2m/{kind}",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/accounts/{id}Desconectar una cuenta
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/accounts/acc_3k9x2m" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/accounts/acc_3k9x2m', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/accounts/acc_3k9x2m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)Grupos de cuentas
Selecciones de cuentas guardadas, para publicar en todas a la vez.
/v1/account-groupsListar grupos
Respuesta 200
data []
idstringobligatorionamestringobligatorioaccountIdsstring[]obligatoriocreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/account-groups" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/account-groups', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/account-groups",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/account-groupsCrear un grupo
Cuerpo
namestringobligatorioÚnico en el workspace.
accountIdsstring[]obligatorioCuentas de cualquier perfil.
Respuesta 201
data
idstringobligatorionamestringobligatorioaccountIdsstring[]obligatoriocreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/account-groups" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/account-groups', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/account-groups",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/account-groups/{id}Editar un grupo
Parámetros
idstringobligatorio
Cuerpo
namestringopcionalÚnico en el workspace.
accountIdsstring[]opcionalCuentas de cualquier perfil.
Respuesta 200
data
idstringobligatorionamestringobligatorioaccountIdsstring[]obligatoriocreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X PATCH "https://api.usecrier.com/v1/account-groups/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/account-groups/key_2b4n6m', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/account-groups/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/account-groups/{id}Borrar un grupo
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/account-groups/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/account-groups/key_2b4n6m', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/account-groups/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)Publicaciones
Publica ahora, programa, usa la cola o guarda borradores en una o varias cuentas.
/v1/postsCrear una publicación
Se publica ahora salvo que envíes scheduledFor, queue: true o draft: true. Cada destino es una cuenta y puede llevar su propio texto, medios y opciones de red (instagram, youtube, tiktok…). Los destinos de TikTok siempre necesitan opciones tiktok.
Cuerpo
contentstringobligatorioTexto que se publica en los destinos que no llevan el suyo.
mediaobject[]opcionalImágenes, vídeos o documentos. Súbelos antes con POST /v1/media/upload-url.
media
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioUna cuenta conectada (GET /v1/accounts).
contentstringopcionalSustituye el texto del post en esta red.
mediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
youtubeobjectopcionalyoutube
titlestringopcionalTítulo del vídeo (hasta 100 caracteres).
visibilitystringopcionalpublic,unlistedoprivate.madeForKidsbooleanopcionalMarca COPPA. YouTube puede limitar los vídeos que no la indican.
categoryIdstringopcionalId numérico de categoría de YouTube.
playlistIdstringopcionalAñadirlo a esta lista de reproducción.
tagsstring[]opcionalEtiquetas (500 caracteres en total).
firstCommentstringopcionalComentario que se publica justo después.
thumbnailUrlstring (uri)opcionalMiniatura personalizada.
containsSyntheticMediabooleanopcionalContiene contenido realista generado o alterado con IA.
notifySubscribersbooleanopcionalfalselo sube sin avisar a los suscriptores.
tiktokobjectopcionaltiktok
privacystringobligatorioQuién lo ve:
public,friends,followersoprivate.allowCommentsbooleanobligatorioPermitir comentarios.
allowDuetbooleanopcionalPermitir dúos.
allowStitchbooleanopcionalPermitir stitch.
commercialContentstringopcionalown_brandsi promociona tu negocio,paid_partnershipsi es patrocinado. No con privacidadprivate.autoAddMusicbooleanopcionalSolo fotos: TikTok puede añadir música recomendada.
consenttrueobligatorioSiempre
true: el usuario vio la vista previa y aceptó publicar.
instagramobjectopcionalinstagram
formatstringopcionalfeed,reelostory. Por defecto, las imágenes van al feed y un vídeo es un Reel.shareToFeedbooleanopcionalSolo Reels:
falselo deja fuera de la cuadrícula del perfil.collaboratorsstring[]opcionalHasta 3 usuarios de empresa o creador invitados como colaboradores. No en Stories.
firstCommentstringopcionalComentario que se publica justo después. No en Stories.
coverUrlstring (uri)opcionalSolo Reels: imagen de portada.
facebookobjectopcionalfacebook
formatstringopcionalfeed,reelostory.reelTitlestringopcionalSolo Reels: título aparte del texto.
firstCommentstringopcionalComentario que se publica justo después. No en Stories.
linkedinobjectopcionallinkedin
firstCommentstringopcionalComentario que se publica justo después.
disableLinkPreviewbooleanopcionalNo mostrar la vista previa del enlace.
documentTitlestringopcionalTítulo de los documentos (PDF).
xobjectopcionalx
threadstring[]opcionalRespuestas del hilo, en orden. El texto del post es el primer tuit.
replySettingsstringopcionalQuién puede responder:
following,mentionedUsers,subscribersoverified.
threadsobjectopcionalthreads
threadstring[]opcionalRespuestas del hilo, en orden.
topicTagstringopcionalTema de la publicación.
firstCommentstringopcionalComentario que se publica justo después.
blueskyobjectopcionalbluesky
threadstring[]opcionalRespuestas del hilo, en orden.
pinterestobjectopcionalpinterest
titlestringopcionalTítulo del Pin.
linkstring (uri)opcionalA dónde lleva el Pin.
boardIdstringopcionalTablero. Por defecto, el elegido al conectar.
googleBusinessobjectopcionalgoogleBusiness
callToActionobjectopcionalBotón de la publicación.
callToAction
typestringobligatoriolearn_more,book,order,shop,sign_upocall.urlstring (uri)opcionalA dónde lleva el botón. Obligatorio salvo con
call.
telegramobjectopcionaltelegram
parseModestringopcionalFormato del texto:
htmlomarkdown.disableLinkPreviewbooleanopcionalNo mostrar la vista previa del enlace.
silentbooleanopcionalEnviar sin sonido.
protectContentbooleanopcionalImpedir reenviarlo o guardarlo.
snapchatobjectopcionalsnapchat
formatstringopcionalstory(desaparece a las 24 h),saved_story(queda en el perfil) ospotlight.
redditobjectopcionalreddit
subredditstringopcionalSubreddit sin
r/.titlestringopcionalTítulo del post.
linkstring (uri)opcionalLo convierte en un post de enlace.
flairIdstringopcionalFlair del subreddit.
nsfwbooleanopcionalMarcarlo como NSFW.
spoilerbooleanopcionalMarcarlo como spoiler.
scheduledForstring (date-time)opcionalCuándo publicar (ISO 8601 con zona). Sin él se publica ya.
timezonestringopcionalZona horaria IANA a la que se refiere scheduledFor.
queuebooleanopcionalTomar el siguiente hueco libre de la cola del perfil.
draftbooleanopcionalGuardar sin publicar ni programar.
requiresApprovalbooleanopcionalLa deja en
pending_approvalhasta que un propietario o admin la apruebe. Los miembros de un workspace que exige aprobación siempre pasan por aquí.
Respuesta 201
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Our autumn collection is here 🍂",
"media": [
{
"type": "image",
"url": "https://cdn.acme.com/autumn.jpg"
}
],
"targets": [
{
"accountId": "acc_3k9x2m"
},
{
"accountId": "acc_9z8y7x",
"youtube": {
"title": "Autumn collection"
}
}
],
"scheduledFor": "2026-10-30T09:00:00+01:00"
}'const res = await fetch('https://api.usecrier.com/v1/posts', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"content": "Our autumn collection is here 🍂",
"media": [
{
"type": "image",
"url": "https://cdn.acme.com/autumn.jpg"
}
],
"targets": [
{
"accountId": "acc_3k9x2m"
},
{
"accountId": "acc_9z8y7x",
"youtube": {
"title": "Autumn collection"
}
}
],
"scheduledFor": "2026-10-30T09:00:00+01:00"
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"content": "Our autumn collection is here 🍂",
"media": [
{
"type": "image",
"url": "https://cdn.acme.com/autumn.jpg"
}
],
"targets": [
{
"accountId": "acc_3k9x2m"
},
{
"accountId": "acc_9z8y7x",
"youtube": {
"title": "Autumn collection"
}
}
],
"scheduledFor": "2026-10-30T09:00:00+01:00"
},
)
data = res.json()["data"]/v1/postsListar publicaciones
Las más recientes primero.
Parámetros
limitintegeropcional
Respuesta 200
data []
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/posts?limit=20" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts?limit=20', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/posts?limit=20",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/importImportar publicaciones desde un CSV
Una publicación por fila, hasta 50 filas. Columnas: content, accounts (ids separados por |) o group, schedule_time, timezone, queue, draft, media_urls y las de cada red (mira la guía de importación). Envía antes dryRun: true para comprobar las filas sin publicar.
Cuerpo
csvstringobligatorioEl texto del CSV, con la fila de cabecera primero.
dryRunbooleanopcionalComprobar cada fila sin publicar.
Respuesta 200
data
totalintegerobligatoriovalidintegerobligatorioinvalidintegerobligatoriodryRunbooleanobligatoriounknownColumnsstring[]obligatorioColumnas que no se usaron.
rowsobject[]obligatoriorows
rowintegerobligatorioEmpieza en 1, sin contar la cabecera.
okbooleanobligatoriopostIdstringopcionalerrorstringopcional
curl -X POST "https://api.usecrier.com/v1/posts/import" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/import', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/import",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}Cambiar una publicación que no ha salido
Borradores, programadas, con error y canceladas. Los campos que no envíes se mantienen; targets sustituye la lista entera. draft: false publica un borrador ahora, en scheduledFor o en la cola.
Parámetros
idstringobligatorio
Cuerpo
contentstringopcionalTexto que se publica en los destinos que no llevan el suyo.
mediaobject[]opcionalImágenes, vídeos o documentos. Súbelos antes con POST /v1/media/upload-url.
media
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]opcionaltargets
accountIdstringobligatorioUna cuenta conectada (GET /v1/accounts).
contentstringopcionalSustituye el texto del post en esta red.
mediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
youtubeobjectopcionalyoutube
titlestringopcionalTítulo del vídeo (hasta 100 caracteres).
visibilitystringopcionalpublic,unlistedoprivate.madeForKidsbooleanopcionalMarca COPPA. YouTube puede limitar los vídeos que no la indican.
categoryIdstringopcionalId numérico de categoría de YouTube.
playlistIdstringopcionalAñadirlo a esta lista de reproducción.
tagsstring[]opcionalEtiquetas (500 caracteres en total).
firstCommentstringopcionalComentario que se publica justo después.
thumbnailUrlstring (uri)opcionalMiniatura personalizada.
containsSyntheticMediabooleanopcionalContiene contenido realista generado o alterado con IA.
notifySubscribersbooleanopcionalfalselo sube sin avisar a los suscriptores.
tiktokobjectopcionaltiktok
privacystringobligatorioQuién lo ve:
public,friends,followersoprivate.allowCommentsbooleanobligatorioPermitir comentarios.
allowDuetbooleanopcionalPermitir dúos.
allowStitchbooleanopcionalPermitir stitch.
commercialContentstringopcionalown_brandsi promociona tu negocio,paid_partnershipsi es patrocinado. No con privacidadprivate.autoAddMusicbooleanopcionalSolo fotos: TikTok puede añadir música recomendada.
consenttrueobligatorioSiempre
true: el usuario vio la vista previa y aceptó publicar.
instagramobjectopcionalinstagram
formatstringopcionalfeed,reelostory. Por defecto, las imágenes van al feed y un vídeo es un Reel.shareToFeedbooleanopcionalSolo Reels:
falselo deja fuera de la cuadrícula del perfil.collaboratorsstring[]opcionalHasta 3 usuarios de empresa o creador invitados como colaboradores. No en Stories.
firstCommentstringopcionalComentario que se publica justo después. No en Stories.
coverUrlstring (uri)opcionalSolo Reels: imagen de portada.
facebookobjectopcionalfacebook
formatstringopcionalfeed,reelostory.reelTitlestringopcionalSolo Reels: título aparte del texto.
firstCommentstringopcionalComentario que se publica justo después. No en Stories.
linkedinobjectopcionallinkedin
firstCommentstringopcionalComentario que se publica justo después.
disableLinkPreviewbooleanopcionalNo mostrar la vista previa del enlace.
documentTitlestringopcionalTítulo de los documentos (PDF).
xobjectopcionalx
threadstring[]opcionalRespuestas del hilo, en orden. El texto del post es el primer tuit.
replySettingsstringopcionalQuién puede responder:
following,mentionedUsers,subscribersoverified.
threadsobjectopcionalthreads
threadstring[]opcionalRespuestas del hilo, en orden.
topicTagstringopcionalTema de la publicación.
firstCommentstringopcionalComentario que se publica justo después.
blueskyobjectopcionalbluesky
threadstring[]opcionalRespuestas del hilo, en orden.
pinterestobjectopcionalpinterest
titlestringopcionalTítulo del Pin.
linkstring (uri)opcionalA dónde lleva el Pin.
boardIdstringopcionalTablero. Por defecto, el elegido al conectar.
googleBusinessobjectopcionalgoogleBusiness
callToActionobjectopcionalBotón de la publicación.
callToAction
typestringobligatoriolearn_more,book,order,shop,sign_upocall.urlstring (uri)opcionalA dónde lleva el botón. Obligatorio salvo con
call.
telegramobjectopcionaltelegram
parseModestringopcionalFormato del texto:
htmlomarkdown.disableLinkPreviewbooleanopcionalNo mostrar la vista previa del enlace.
silentbooleanopcionalEnviar sin sonido.
protectContentbooleanopcionalImpedir reenviarlo o guardarlo.
snapchatobjectopcionalsnapchat
formatstringopcionalstory(desaparece a las 24 h),saved_story(queda en el perfil) ospotlight.
redditobjectopcionalreddit
subredditstringopcionalSubreddit sin
r/.titlestringopcionalTítulo del post.
linkstring (uri)opcionalLo convierte en un post de enlace.
flairIdstringopcionalFlair del subreddit.
nsfwbooleanopcionalMarcarlo como NSFW.
spoilerbooleanopcionalMarcarlo como spoiler.
scheduledForstring (date-time)opcionalCuándo publicar (ISO 8601 con zona). Sin él se publica ya.
timezonestringopcionalZona horaria IANA a la que se refiere scheduledFor.
queuebooleanopcionalTomar el siguiente hueco libre de la cola del perfil.
draftbooleanopcionalGuardar sin publicar ni programar.
requiresApprovalbooleanopcionalLa deja en
pending_approvalhasta que un propietario o admin la apruebe. Los miembros de un workspace que exige aprobación siempre pasan por aquí.
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X PATCH "https://api.usecrier.com/v1/posts/pst_7q1w0e" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/posts/pst_7q1w0e",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}Ver una publicación
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/posts/pst_7q1w0e" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/posts/pst_7q1w0e",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}Borrar una publicación
La borra de Crier. Si sigue publicada, retírala antes.
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/posts/pst_7q1w0e" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/posts/pst_7q1w0e",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/posts/{id}/editEditar el texto de una publicación publicada
En X (cuentas Premium, durante la primera hora), Facebook, LinkedIn, YouTube, Pinterest, Google Business, Telegram, Discord y Reddit. Las imágenes y vídeos no cambian.
Parámetros
idstringobligatorio
Cuerpo
contentstringobligatorioEl nuevo texto de la publicación.
accountIdstringopcionalEditar solo la copia de esta cuenta; si no, todas las publicadas.
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/edit" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/edit', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/edit",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/metricsVer las métricas de una publicación
Impresiones, alcance, reproducciones, me gusta, comentarios, compartidos, guardados y clics, en total y por cuenta. Cada red da las suyas.
Parámetros
idstringobligatorio
Respuesta 200
data
totalobjectobligatoriototal
impressionsintegerobligatorioreachintegerobligatorioviewsintegerobligatoriolikesintegerobligatoriocommentsintegerobligatoriosharesintegerobligatoriosavesintegerobligatorioclicksintegerobligatorioengagementRatenumberobligatorioPorcentaje: interacciones sobre impresiones (o alcance).
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriometricsobjectobligatoriometrics
impressionsintegerobligatorioreachintegerobligatorioviewsintegerobligatoriolikesintegerobligatoriocommentsintegerobligatoriosharesintegerobligatoriosavesintegerobligatorioclicksintegerobligatorioengagementRatenumberobligatorioPorcentaje: interacciones sobre impresiones (o alcance).
updatedAtstring (date-time)opcional
curl "https://api.usecrier.com/v1/posts/pst_7q1w0e/metrics" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/metrics', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/metrics",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/cancelCancelar una publicación programada, un borrador o una pendiente de aprobación
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/cancel" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/cancel', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/cancel",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/reviewAprobar o rechazar una publicación
Solo para publicaciones en pending_approval, por propietarios, admins o una API key. Aprobar la programa para su fecha, la mete en la cola si la pidió o la publica ya si su fecha pasó. Rechazar la devuelve a borrador con la nota y envía post.rejected.
Parámetros
idstringobligatorio
Cuerpo
decisionstringobligatorioapprovela programa (o la publica ya si su fecha pasó);rejectla devuelve a borrador.notestringopcionalEl motivo, para quien la escribió. Se muestra con el borrador tras un rechazo.
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/review" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/review', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/review",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/recyclingReciclar una publicación
La vuelve a publicar cada every semanas o meses como una publicación nueva (recycledFrom apunta a la original), hasta maxCopies o until. Las copias no van a YouTube ni a TikTok, y cada cuenta puede tener hasta 10 publicaciones reciclándose. Enviarlo otra vez cambia la regla y mantiene la cuenta de copias.
Parámetros
idstringobligatorio
Cuerpo
everyintegerobligatorioCuántas unidades entre copia y copia.
unitstringobligatorioweek(semana) omonth(mes).startAtstring (date-time)opcionalCuándo sale la primera copia. Por defecto, un intervalo después de la fecha de la publicación; si es antigua, la siguiente fecha de esa serie, a la misma hora.
maxCopiesintegeropcionalParar tras este número de copias.
untilstring (date-time)opcionalParar después de esta fecha.
variationsstring[]opcionalTextos que se usan por turnos en lugar del de la publicación. El texto propio de un destino sigue mandando. Recomendado en X y Pinterest, que penalizan las repeticiones.
timezonestringopcionalZona horaria IANA (por ejemplo
Europe/Madrid) en la que se cuenta el intervalo, para que las copias mantengan su hora local cuando cambia la hora. UTC por defecto.
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X PUT "https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.put(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/recyclingDejar de reciclar una publicación
Las copias ya creadas se quedan como están.
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X DELETE "https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/recycling",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/posts/{id}/retryReintentar los destinos fallidos
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/retry" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/retry', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/retry",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/posts/{id}/unpublishRetirar una publicación
De todas las redes o solo de accountId.
Parámetros
idstringobligatorio
Cuerpo
accountIdstringopcional
Respuesta 200
data
idstringobligatoriocontentstringobligatoriomediaobject[]obligatoriomedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
targetsobject[]obligatoriotargets
accountIdstringobligatorioplatformstringobligatoriocontentstringopcionalmediaobject[]opcionalmedia
typestringobligatoriourlstring (uri)obligatorioaltTextstringopcional
statusstringobligatoriourlstring (uri)opcionalLa publicación en la red, una vez publicada.
errorstringopcional
statusstringobligatorioscheduledForstring (date-time)opcionalapprovalobjectopcionalAparece cuando la publicación ha pasado por revisión.
approval
requestedBystringopcionalQuién la envió a revisión; no aparece si fue una API key.
requestedAtstring (date-time)obligatorioqueuebooleanopcionalAl aprobarla, entra en la cola del perfil.
decisionstringopcionaldecidedBystringopcionaldecidedAtstring (date-time)opcionalnotestringopcionalPor qué se rechazó.
recyclingobjectopcionalAparece cuando se activa el reciclado.
recycling
activebooleanobligatorioeveryintegerobligatoriounitstringobligatoriostartAtstring (date-time)opcionalmaxCopiesintegeropcionaluntilstring (date-time)opcionalvariationsstring[]opcionaltimezonestringopcionalcopiesintegerobligatorioCopias creadas hasta ahora.
nextAtstring (date-time)opcionalCuándo sale la siguiente copia; no aparece cuando se ha parado.
lastCopyIdstringopcionalLa última copia, que es una publicación propia.
recycledFromstringopcionalEn una copia reciclada: la publicación original.
createdAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl -X POST "https://api.usecrier.com/v1/posts/pst_7q1w0e/unpublish" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_3k9x2m"
}'const res = await fetch('https://api.usecrier.com/v1/posts/pst_7q1w0e/unpublish', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"accountId": "acc_3k9x2m"
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/posts/pst_7q1w0e/unpublish",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"accountId": "acc_3k9x2m"
},
)
data = res.json()["data"]Multimedia
Sube imágenes y vídeos a Crier antes de publicarlos.
/v1/media/upload-urlPedir una URL de subida
JPEG, PNG, WebP y GIF hasta 20 MB; MP4, MOV y WebM hasta 1 GB. Sube el archivo con PUT a uploadUrl y usa publicUrl en el post.
Cuerpo
filenamestringobligatoriocontentTypestringobligatoriosizeintegerobligatorio
Respuesta 200
data
uploadUrlstring (uri)obligatorioURL prefirmada: sube el archivo con PUT y el mismo Content-Type.
publicUrlstring (uri)obligatorioÚsala en el media del post una vez subido.
kindstringobligatorioexpiresInintegerobligatorioSegundos que vale la URL de subida.
curl -X POST "https://api.usecrier.com/v1/media/upload-url" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "autumn.mp4",
"contentType": "video/mp4",
"size": 48211234
}'const res = await fetch('https://api.usecrier.com/v1/media/upload-url', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"filename": "autumn.mp4",
"contentType": "video/mp4",
"size": 48211234
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/media/upload-url",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"filename": "autumn.mp4",
"contentType": "video/mp4",
"size": 48211234
},
)
data = res.json()["data"]Bandeja
Mensajes directos, comentarios y reseñas de las cuentas de un perfil. Los listados piden el perfil; las acciones, la cuenta a la que pertenece cada elemento.
/v1/inbox/conversationsListar conversaciones
Mensajes directos de Facebook, Instagram, X, Bluesky, Reddit y Telegram, los más recientes primero.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalstatusstringopcionalcursorstringopcionalEl nextCursor de la página anterior.
limitintegeropcional
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatorioId opaco de la conversación.
accountIdstringobligatorioplatformstringobligatorioparticipantobjectobligatorioparticipant
namestringopcionalusernamestringopcionalpicturestring (uri)opcional
lastMessagestringopcionalupdatedAtstring (date-time)opcionalstatusstringobligatoriounreadCountintegerobligatoriourlstring (uri)opcionalAbre la conversación en la red.
nextCursorstring | nullobligatorioEnvíalo como cursor para la página siguiente; null en la última.
curl "https://api.usecrier.com/v1/inbox/conversations" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/conversations', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/inbox/conversations",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/conversations/{id}/messagesListar los mensajes de una conversación
Parámetros
idstringobligatorioaccountIdstringobligatorioLa cuenta a la que pertenece.
cursorstringopcionalEl nextCursor de la página anterior.
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatoriodirectionstringobligatoriotextstringobligatoriosenderNamestringopcionalcreatedAtstring (date-time)obligatorioattachmentsobject[]obligatorioattachments
typestringobligatoriourlstring (uri)opcionalnamestringopcional
deliveryStatusstringopcionaldeletedbooleanobligatorio
nextCursorstring | nullobligatorioEnvíalo como cursor para la página siguiente; null en la última.
curl "https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/conversations/{id}/messagesEnviar un mensaje
Texto, un adjunto o ambos. Meta solo deja responder durante las 24 horas siguientes al último mensaje de la persona.
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
textstringopcionalattachmentUrlstring (uri)opcionalUna URL https pública (por ejemplo, de POST /v1/media/upload-url).
attachmentTypestringopcional
Respuesta 204
Sin contenido
curl -X POST "https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/messages",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/conversations/{id}/readMarcar una conversación como leída
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
Respuesta 204
Sin contenido
curl -X POST "https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/read" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/read', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m/read",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/conversations/{id}Archivar o recuperar una conversación
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
statusstringobligatorio
Respuesta 204
Sin contenido
curl -X PATCH "https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/inbox/conversations/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/postsListar publicaciones con comentarios
Publicaciones recientes de las cuentas del perfil con su número de comentarios, también las publicadas fuera de Crier.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalcursorstringopcionalEl nextCursor de la página anterior.
limitintegeropcional
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatorioId opaco de la publicación para los endpoints de comentarios.
accountIdstringobligatorioplatformstringobligatoriocontentstringobligatoriopicturestring (uri)opcionalurlstring (uri)opcionalcreatedAtstring (date-time)opcionalcommentCountintegerobligatoriolikeCountintegerobligatorio
nextCursorstring | nullobligatorioEnvíalo como cursor para la página siguiente; null en la última.
curl "https://api.usecrier.com/v1/inbox/posts" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/posts', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/inbox/posts",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/posts/{id}/commentsListar los comentarios de una publicación
Parámetros
idstringobligatorioaccountIdstringobligatorioLa cuenta a la que pertenece.
cursorstringopcionalEl nextCursor de la página anterior.
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatorioId opaco del comentario.
textstringobligatorioauthorobjectobligatorioauthor
namestringopcionalusernamestringopcionalpicturestring (uri)opcionalisOwnerbooleanobligatorioEscrito por la cuenta conectada.
createdAtstring (date-time)opcionallikeCountintegerobligatorioreplyCountintegerobligatoriourlstring (uri)opcionalcanobjectobligatorioLo que esta red permite hacer con él.
can
replybooleanobligatoriodeletebooleanobligatoriohidebooleanobligatoriolikebooleanobligatorio
hiddenbooleanobligatoriolikedbooleanobligatoriorepliesobject[]obligatorioreplies
idstringobligatorioId opaco del comentario.
textstringobligatorioauthorobjectobligatorioauthor
namestringopcionalusernamestringopcionalpicturestring (uri)opcionalisOwnerbooleanobligatorioEscrito por la cuenta conectada.
createdAtstring (date-time)opcionallikeCountintegerobligatorioreplyCountintegerobligatoriourlstring (uri)opcionalcanobjectobligatorioLo que esta red permite hacer con él.
can
replybooleanobligatoriodeletebooleanobligatoriohidebooleanobligatoriolikebooleanobligatorio
hiddenbooleanobligatoriolikedbooleanobligatorio
nextCursorstring | nullobligatorioEnvíalo como cursor para la página siguiente; null en la última.
curl "https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/posts/{id}/commentsComentar o responder a un comentario
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
textstringobligatoriocommentIdstringopcionalResponder bajo este comentario; sin él, se comenta en la publicación.
Respuesta 204
Sin contenido
curl -X POST "https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/posts/{id}/comments/{commentId}Ocultar un comentario o darle me gusta
Cada comentario indica en can lo que permite su red.
Parámetros
idstringobligatoriocommentIdstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
hiddenbooleanopcionallikedbooleanopcional
Respuesta 204
Sin contenido
curl -X PATCH "https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/posts/{id}/comments/{commentId}Borrar un comentario
Parámetros
idstringobligatoriocommentIdstringobligatorioaccountIdstringobligatorioLa cuenta a la que pertenece.
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/inbox/posts/key_2b4n6m/comments/{commentId}",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/inbox/reviewsListar reseñas
Reseñas de Google Business y de Facebook, con su total y la valoración media.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalcursorstringopcionalEl nextCursor de la página anterior.
limitintegeropcionalhasReplystringopcionalSolo reseñas con respuesta (true) o sin ella (false).
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatorioId opaco de la reseña.
accountIdstringobligatorioplatformstringobligatorioreviewerobjectobligatorioreviewer
namestringopcionalusernamestringopcionalpicturestring (uri)opcional
ratinginteger | nullobligatorioDe 1 a 5; null en Facebook, que recomienda en su lugar.
recommendsbooleanopcionaltextstringobligatoriocreatedAtstring (date-time)opcionalreplyobject | nullobligatorioreply
textstringobligatoriocreatedAtstring (date-time)opcional
urlstring (uri)opcionallocationstringopcionalFicha de Google Business.
nextCursorstring | nullobligatorioEnvíalo como cursor para la página siguiente; null en la última.
summaryobjectobligatoriosummary
totalintegerobligatorioaverageRatingnumber | nullobligatorio
curl "https://api.usecrier.com/v1/inbox/reviews" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/reviews', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/inbox/reviews",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/reviews/{id}/replyResponder a una reseña
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta a la que pertenece.
textstringobligatorio
Respuesta 204
Sin contenido
curl -X POST "https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/inbox/reviews/{id}/replyBorrar la respuesta a una reseña
Solo en Google Business.
Parámetros
idstringobligatorioaccountIdstringobligatorioLa cuenta a la que pertenece.
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/inbox/reviews/key_2b4n6m/reply",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)Automatizaciones
Comentario a mensaje: a quien comente una palabra clave, se le responde con un mensaje privado (Instagram, Facebook) o en público (todas las redes).
/v1/automationsListar automatizaciones
Parámetros
profileIdstringobligatorioaccountIdstringopcional
Respuesta 200
data []
idstringobligatorioaccountIdstringobligatorioplatformstringobligatorionamestringobligatoriotriggerstringobligatoriopostIdstring | nullobligatorioinboxPostIdstring | nullobligatoriokeywordsstring[]obligatoriomatchModestringobligatorioexcludeKeywordsstring[]obligatoriodmMessagestringopcionalbuttonsobject[]obligatoriobuttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionaldmDelaySecondsintegeropcionalrepeatstringobligatoriolikeCommentbooleanobligatoriohideCommentbooleanobligatorioactivebooleanobligatoriostatsobjectobligatoriostats
triggeredintegerobligatoriodmsSentintegerobligatoriodmsFailedintegerobligatoriouniqueContactsintegerobligatoriolinkClicksintegerobligatorio
createdAtstring (date-time)opcional
curl "https://api.usecrier.com/v1/automations" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/automations', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/automations",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/automationsCrear una automatización
En Instagram y Facebook envía dmMessage (con hasta 3 botones) a quien comente una palabra clave; en TikTok, Threads, LinkedIn y YouTube publica commentReply. Sin publicación, vigila todas las de la cuenta.
Cuerpo
namestringobligatoriotriggerstringopcionalstory_reply: respuestas a una story de Instagram.postIdstring | nullopcionalUna publicación de Crier que vigilar.
inboxPostIdstring | nullopcionalO una publicación tal como la lista GET /v1/inbox/posts. Ninguna: todas.
keywordsstring[]opcionalVacío: cualquier comentario la activa.
matchModestringopcionalexcludeKeywordsstring[]opcionaldmMessagestringopcionalMensaje privado a quien comenta. Solo Instagram y Facebook, y obligatorio en ellas.
buttonsobject[]opcionalHasta 3 botones bajo el mensaje.
buttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionalRespuesta pública al comentario. Obligatoria en TikTok, Threads, LinkedIn y YouTube.
dmDelaySecondsintegeropcionalrepeatstringopcionalonce: un mensaje por persona.likeCommentbooleanopcionalhideCommentbooleanopcionalactivebooleanopcionalaccountIdstringobligatorioCuenta de Instagram, Facebook, TikTok, Threads, LinkedIn o YouTube.
Respuesta 201
data
idstringobligatorioaccountIdstringobligatorioplatformstringobligatorionamestringobligatoriotriggerstringobligatoriopostIdstring | nullobligatorioinboxPostIdstring | nullobligatoriokeywordsstring[]obligatoriomatchModestringobligatorioexcludeKeywordsstring[]obligatoriodmMessagestringopcionalbuttonsobject[]obligatoriobuttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionaldmDelaySecondsintegeropcionalrepeatstringobligatoriolikeCommentbooleanobligatoriohideCommentbooleanobligatorioactivebooleanobligatoriostatsobjectobligatoriostats
triggeredintegerobligatoriodmsSentintegerobligatoriodmsFailedintegerobligatoriouniqueContactsintegerobligatoriolinkClicksintegerobligatorio
createdAtstring (date-time)opcional
curl -X POST "https://api.usecrier.com/v1/automations" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/automations', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/automations",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/automations/{id}Ver una automatización
Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatorioaccountIdstringobligatorioplatformstringobligatorionamestringobligatoriotriggerstringobligatoriopostIdstring | nullobligatorioinboxPostIdstring | nullobligatoriokeywordsstring[]obligatoriomatchModestringobligatorioexcludeKeywordsstring[]obligatoriodmMessagestringopcionalbuttonsobject[]obligatoriobuttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionaldmDelaySecondsintegeropcionalrepeatstringobligatoriolikeCommentbooleanobligatoriohideCommentbooleanobligatorioactivebooleanobligatoriostatsobjectobligatoriostats
triggeredintegerobligatoriodmsSentintegerobligatoriodmsFailedintegerobligatoriouniqueContactsintegerobligatoriolinkClicksintegerobligatorio
createdAtstring (date-time)opcional
curl "https://api.usecrier.com/v1/automations/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/automations/key_2b4n6m', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/automations/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/automations/{id}Editar o pausar una automatización
Lo que no envíes se mantiene. active: false la pausa.
Parámetros
idstringobligatorio
Cuerpo
namestringopcionaltriggerstringopcionalstory_reply: respuestas a una story de Instagram.postIdstring | nullopcionalUna publicación de Crier que vigilar.
inboxPostIdstring | nullopcionalO una publicación tal como la lista GET /v1/inbox/posts. Ninguna: todas.
keywordsstring[]opcionalVacío: cualquier comentario la activa.
matchModestringopcionalexcludeKeywordsstring[]opcionaldmMessagestringopcionalMensaje privado a quien comenta. Solo Instagram y Facebook, y obligatorio en ellas.
buttonsobject[]opcionalHasta 3 botones bajo el mensaje.
buttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionalRespuesta pública al comentario. Obligatoria en TikTok, Threads, LinkedIn y YouTube.
dmDelaySecondsintegeropcionalrepeatstringopcionalonce: un mensaje por persona.likeCommentbooleanopcionalhideCommentbooleanopcionalactivebooleanopcional
Respuesta 200
data
idstringobligatorioaccountIdstringobligatorioplatformstringobligatorionamestringobligatoriotriggerstringobligatoriopostIdstring | nullobligatorioinboxPostIdstring | nullobligatoriokeywordsstring[]obligatoriomatchModestringobligatorioexcludeKeywordsstring[]obligatoriodmMessagestringopcionalbuttonsobject[]obligatoriobuttons
typestringobligatoriotitlestringobligatoriourlstring (uri)opcionalpayloadstringopcional
commentReplystringopcionaldmDelaySecondsintegeropcionalrepeatstringobligatoriolikeCommentbooleanobligatoriohideCommentbooleanobligatorioactivebooleanobligatoriostatsobjectobligatoriostats
triggeredintegerobligatoriodmsSentintegerobligatoriodmsFailedintegerobligatoriouniqueContactsintegerobligatoriolinkClicksintegerobligatorio
createdAtstring (date-time)opcional
curl -X PATCH "https://api.usecrier.com/v1/automations/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/automations/key_2b4n6m', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.patch(
"https://api.usecrier.com/v1/automations/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/automations/{id}Borrar una automatización
Parámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/automations/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/automations/key_2b4n6m', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/automations/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)/v1/automations/{id}/logsQué ha hecho una automatización
Cada comentario que la activó, el más reciente primero, con el resultado del mensaje.
Parámetros
idstringobligatorioskipintegeropcionallimitintegeropcional
Respuesta 200
data
itemsobject[]obligatorioitems
idstringobligatoriocommenterobjectobligatoriocommenter
namestringopcionalusernamestringopcional
commentTextstringopcionalstatusstringobligatorioerrorstringopcionalreplyStatusstringopcionalclickedbooleanobligatoriocreatedAtstring (date-time)obligatorio
totalintegerobligatorio
curl "https://api.usecrier.com/v1/automations/key_2b4n6m/logs" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/automations/key_2b4n6m/logs', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/automations/key_2b4n6m/logs",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]Analíticas
Seguidores, totales diarios, mejores horas para publicar y mejores publicaciones, por perfil o por cuenta.
/v1/analytics/followersSeguidores y crecimiento
Seguidores actuales, crecimiento en el periodo e histórico diario de cada cuenta. Se actualiza una vez al día.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalSolo esta cuenta; si no, todo el perfil.
fromstringopcionalPrimer día (YYYY-MM-DD). Por defecto, hace 30 días.
tostringopcionalÚltimo día (YYYY-MM-DD). Por defecto, hoy.
Respuesta 200
data []
accountIdstringobligatorioplatformstringobligatoriousernamestringopcionalfollowersintegerobligatoriogrowthintegerobligatorioCambio en el periodo.
growthPercentnumberobligatoriohistoryobject[]obligatoriohistory
datestringobligatorioYYYY-MM-DD
followersintegerobligatorio
curl "https://api.usecrier.com/v1/analytics/followers" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/analytics/followers', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/analytics/followers",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/analytics/dailyTotales diarios
Publicaciones e interacción por día (contada el día que llega) y totales por red.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalSolo esta cuenta; si no, todo el perfil.
fromstringopcionalPrimer día (YYYY-MM-DD). Por defecto, hace 30 días.
tostringopcionalÚltimo día (YYYY-MM-DD). Por defecto, hoy.
Respuesta 200
data
daysobject[]obligatoriodays
datestringobligatorioYYYY-MM-DD
postsintegerobligatoriometricsobjectobligatoriometrics
impressionsintegerobligatorioreachintegerobligatorioviewsintegerobligatoriolikesintegerobligatoriocommentsintegerobligatoriosharesintegerobligatoriosavesintegerobligatorioclicksintegerobligatorioengagementRatenumberobligatorioPorcentaje: interacciones sobre impresiones (o alcance).
byPlatformobject[]obligatoriobyPlatform
platformstringobligatoriopostsintegerobligatoriometricsobjectobligatoriometrics
impressionsintegerobligatorioreachintegerobligatorioviewsintegerobligatoriolikesintegerobligatoriocommentsintegerobligatoriosharesintegerobligatoriosavesintegerobligatorioclicksintegerobligatorioengagementRatenumberobligatorioPorcentaje: interacciones sobre impresiones (o alcance).
curl "https://api.usecrier.com/v1/analytics/daily" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/analytics/daily', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/analytics/daily",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/analytics/best-timesMejores horas para publicar
Interacción media por día de la semana y hora, a partir de las publicaciones de la cuenta.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalSolo esta cuenta; si no, todo el perfil.
Respuesta 200
data []
dayOfWeekintegerobligatorio0 = domingo … 6 = sábado
hourintegerobligatorioHora en UTC
avgEngagementnumberobligatoriopostsintegerobligatorio
curl "https://api.usecrier.com/v1/analytics/best-times" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/analytics/best-times', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/analytics/best-times",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/analytics/top-postsMejores publicaciones
Publicaciones del periodo por interacción (o por fecha), también las publicadas fuera de Crier.
Parámetros
profileIdstringobligatorioaccountIdstringopcionalSolo esta cuenta; si no, todo el perfil.
fromstringopcionalPrimer día (YYYY-MM-DD). Por defecto, hace 30 días.
tostringopcionalÚltimo día (YYYY-MM-DD). Por defecto, hoy.
sortBystringopcionallimitintegeropcional
Respuesta 200
data []
postIdstring | nullobligatorioLa publicación de Crier, si se publicó con Crier.
accountIdstring | nullobligatorioplatformstringobligatoriocontentstringobligatoriopublishedAtstring (date-time)opcionalurlstring (uri)opcionalthumbnailUrlstring (uri)opcionalmetricsobjectobligatoriometrics
impressionsintegerobligatorioreachintegerobligatorioviewsintegerobligatoriolikesintegerobligatoriocommentsintegerobligatoriosharesintegerobligatoriosavesintegerobligatorioclicksintegerobligatorioengagementRatenumberobligatorioPorcentaje: interacciones sobre impresiones (o alcance).
externalbooleanobligatorioPublicada fuera de Crier.
curl "https://api.usecrier.com/v1/analytics/top-posts" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/analytics/top-posts', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/analytics/top-posts",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]Facturación
Un saldo prepago: las cuentas conectadas a partir de las gratis se cobran día a día y el uso (API de X, mensajes) según se produce. Se recarga desde el panel.
/v1/billingVer el saldo
Saldo, cuentas conectadas y lo que cuestan. Con el saldo agotado, conectar más allá de las cuentas gratis, y publicar o enviar desde las cuentas a partir de ellas o de X, responden 402.
Respuesta 200
data
enabledbooleanobligatorioFalse mientras la facturación no está disponible: no se cobra ni se limita nada.
balancenumberobligatorioSaldo prepago en céntimos (hasta tres decimales). Negativo si los cargos lo superaron.
currencystringobligatorioconnectedAccountsintegerobligatoriofreeAccountsintegerobligatoriomonthlyEstimateintegerobligatorioPrecio mensual de las cuentas conectadas ahora, en céntimos. Se cobra día a día.
dailyEstimatenumberobligatorioLo que cuestan hoy esas cuentas, en céntimos (hasta tres decimales).
daysLeftinteger | nullobligatorioDías completos que cubre el saldo a ese coste; null si no hay cargo diario.
linesobject[]obligatoriolines
fromintegerobligatoriotointeger | nullobligatorioaccountsintegerobligatoriounitAmountintegerobligatorioCéntimos por cuenta y mes.
amountintegerobligatorio
canConnectMorebooleanobligatorioSi ahora mismo se puede conectar una cuenta más.
blockedbooleanobligatorioEl saldo se ha agotado: las cuentas a partir de las gratis, y las de X, no pueden publicar ni enviar hasta que se recargue.
cardobjectopcionalEl método de pago guardado, para las recargas automáticas.
card
brandstringobligatorioMarca de la tarjeta (
visa,mastercard…) u otro método guardado (link,sepa_debit).last4stringopcionalexpMonthintegeropcionalexpYearintegeropcional
autoRechargeobjectopcionalautoRecharge
enabledbooleanobligatoriothresholdintegerobligatorioRecargar cuando el saldo baje de esto, en céntimos.
amountintegerobligatorioLo que añade cada recarga, en céntimos.
monthlyLimitintegerobligatorioMáximo que añaden las recargas automáticas en un mes natural, en céntimos.
autoRechargeErrorobjectopcionalPor qué falló la última recarga automática; se desactivó sola.
autoRechargeError
atstring (date-time)obligatoriomessagestringobligatorio
autoRechargedThisMonthintegerobligatorioLo añadido por recargas automáticas este mes, en céntimos.
topUpobjectobligatorioImportes de recarga permitidos, en céntimos.
topUp
minintegerobligatoriomaxintegerobligatorio
hasPortalbooleanobligatorioSi el portal de facturación (facturas, método de pago) está disponible.
curl "https://api.usecrier.com/v1/billing" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/billing",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/billing/movementsListar los movimientos del saldo
Recargas y cargos, del más reciente al más antiguo.
Parámetros
limitintegeropcional
Respuesta 200
data []
idstringobligatoriokindstringobligatorioamountnumberobligatorioCéntimos (hasta tres decimales): en positivo suma, en negativo descuenta.
atstring (date-time)obligatoriodaystringopcionalDía UTC (YYYY-MM-DD) que cubre un cargo.
accountsintegeropcionalCuentas por las que se cobró un día.
familystringopcionalTipo de uso de un cargo por uso.
curl "https://api.usecrier.com/v1/billing/movements" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/movements', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/billing/movements",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/billing/top-upAñadir saldo
Solo desde el panelAbre una página de pago. El saldo sube cuando el pago se completa, y la tarjeta queda guardada para las recargas automáticas.
Cuerpo
amountintegerobligatorioSaldo que añadir, en céntimos (impuestos aparte, si los hay). Los límites vienen en GET /v1/billing.
successUrlstring (uri)obligatorioPágina del panel a la que volver tras pagar.
cancelUrlstring (uri)obligatorioPágina del panel a la que volver si el usuario sale de Checkout.
Respuesta 200
data
urlstring (uri)obligatorioManda aquí al usuario.
curl -X POST "https://api.usecrier.com/v1/billing/top-up" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/top-up', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/billing/top-up",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/billing/auto-rechargeConfigurar la recarga automática
Solo desde el panelRecarga la tarjeta guardada cuando el saldo baja del umbral, hasta un máximo al mes. Necesita una recarga previa.
Cuerpo
enabledbooleanobligatoriothresholdintegerobligatorioRecargar cuando el saldo baje de esto, en céntimos.
amountintegerobligatorioLo que añade cada recarga, en céntimos.
monthlyLimitintegerobligatorioMáximo que pueden añadir las recargas automáticas en un mes natural, en céntimos.
Respuesta 200
data
enabledbooleanobligatorioFalse mientras la facturación no está disponible: no se cobra ni se limita nada.
balancenumberobligatorioSaldo prepago en céntimos (hasta tres decimales). Negativo si los cargos lo superaron.
currencystringobligatorioconnectedAccountsintegerobligatoriofreeAccountsintegerobligatoriomonthlyEstimateintegerobligatorioPrecio mensual de las cuentas conectadas ahora, en céntimos. Se cobra día a día.
dailyEstimatenumberobligatorioLo que cuestan hoy esas cuentas, en céntimos (hasta tres decimales).
daysLeftinteger | nullobligatorioDías completos que cubre el saldo a ese coste; null si no hay cargo diario.
linesobject[]obligatoriolines
fromintegerobligatoriotointeger | nullobligatorioaccountsintegerobligatoriounitAmountintegerobligatorioCéntimos por cuenta y mes.
amountintegerobligatorio
canConnectMorebooleanobligatorioSi ahora mismo se puede conectar una cuenta más.
blockedbooleanobligatorioEl saldo se ha agotado: las cuentas a partir de las gratis, y las de X, no pueden publicar ni enviar hasta que se recargue.
cardobjectopcionalEl método de pago guardado, para las recargas automáticas.
card
brandstringobligatorioMarca de la tarjeta (
visa,mastercard…) u otro método guardado (link,sepa_debit).last4stringopcionalexpMonthintegeropcionalexpYearintegeropcional
autoRechargeobjectopcionalautoRecharge
enabledbooleanobligatoriothresholdintegerobligatorioRecargar cuando el saldo baje de esto, en céntimos.
amountintegerobligatorioLo que añade cada recarga, en céntimos.
monthlyLimitintegerobligatorioMáximo que añaden las recargas automáticas en un mes natural, en céntimos.
autoRechargeErrorobjectopcionalPor qué falló la última recarga automática; se desactivó sola.
autoRechargeError
atstring (date-time)obligatoriomessagestringobligatorio
autoRechargedThisMonthintegerobligatorioLo añadido por recargas automáticas este mes, en céntimos.
topUpobjectobligatorioImportes de recarga permitidos, en céntimos.
topUp
minintegerobligatoriomaxintegerobligatorio
hasPortalbooleanobligatorioSi el portal de facturación (facturas, método de pago) está disponible.
curl -X PUT "https://api.usecrier.com/v1/billing/auto-recharge" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/auto-recharge', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.put(
"https://api.usecrier.com/v1/billing/auto-recharge",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/billing/portalAbrir el portal de facturación
Solo desde el panelFacturas y método de pago guardado.
Cuerpo
returnUrlstring (uri)obligatorioPágina del panel a la que volver.
Respuesta 200
data
urlstring (uri)obligatorioManda aquí al usuario.
curl -X POST "https://api.usecrier.com/v1/billing/portal" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/portal', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/billing/portal",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]Webhooks
Recibe los eventos de Crier en tu endpoint HTTPS.
/v1/webhook-endpointVer el endpoint de webhooks
Respuesta 200
data
urlstring (uri)obligatorioeventsstring[]obligatoriocreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
curl "https://api.usecrier.com/v1/webhook-endpoint" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/webhook-endpoint', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/webhook-endpoint",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/webhook-endpointConfigurar el endpoint de webhooks
Sin events recibes todos. El secreto de firma solo se devuelve la primera vez.
Cuerpo
urlstring (starts_with)obligatorioeventsstring[]opcional
Respuesta 200
data
endpointobjectobligatorioendpoint
urlstring (uri)obligatorioeventsstring[]obligatoriocreatedAtstring (date-time)obligatorioupdatedAtstring (date-time)obligatorio
secretstringopcionalSecreto de firma; solo se devuelve al crear el endpoint.
curl -X PUT "https://api.usecrier.com/v1/webhook-endpoint" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://app.acme.com/webhooks/crier"
}'const res = await fetch('https://api.usecrier.com/v1/webhook-endpoint', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"url": "https://app.acme.com/webhooks/crier"
}),
});
const { data } = await res.json();import os, requests
res = requests.put(
"https://api.usecrier.com/v1/webhook-endpoint",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"url": "https://app.acme.com/webhooks/crier"
},
)
data = res.json()["data"]/v1/webhook-endpointBorrar el endpoint de webhooks
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/webhook-endpoint" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/webhook-endpoint', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/webhook-endpoint",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)API keys
Gestiona las API keys. Solo desde el panel, para que una key filtrada no pueda crear otras.
/v1/api-keysListar API keys
Solo desde el panelRespuesta 200
data []
idstringobligatorionamestringobligatorioprefixstringobligatoriocreatedAtstring (date-time)obligatoriorevokedAtstring (date-time)opcional
curl "https://api.usecrier.com/v1/api-keys" \
-H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/api-keys', {
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.usecrier.com/v1/api-keys",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)
data = res.json()["data"]/v1/api-keysCrear una API key
Solo desde el panelCuerpo
namestringobligatorio
Respuesta 201
data
keyobjectobligatoriokey
idstringobligatorionamestringobligatorioprefixstringobligatoriocreatedAtstring (date-time)obligatoriorevokedAtstring (date-time)opcional
secretstringobligatorioLa key completa; solo se muestra esta vez.
curl -X POST "https://api.usecrier.com/v1/api-keys" \
-H "Authorization: Bearer $CRIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "production"
}'const res = await fetch('https://api.usecrier.com/v1/api-keys', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "production"
}),
});
const { data } = await res.json();import os, requests
res = requests.post(
"https://api.usecrier.com/v1/api-keys",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
json={
"name": "production"
},
)
data = res.json()["data"]/v1/api-keys/{id}Revocar una API key
Solo desde el panelParámetros
idstringobligatorio
Respuesta 204
Sin contenido
curl -X DELETE "https://api.usecrier.com/v1/api-keys/key_2b4n6m" \
-H "Authorization: Bearer $CRIER_API_KEY"await fetch('https://api.usecrier.com/v1/api-keys/key_2b4n6m', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.CRIER_API_KEY}`,
},
});import os, requests
requests.delete(
"https://api.usecrier.com/v1/api-keys/key_2b4n6m",
headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},
)