Conecta Growwer a tus propios sistemas. Busca en el catálogo de medios para tus proyectos, consulta precios y ofertas flash, haz y sigue tus pedidos o, si vendes, gestiona los pedidos que recibes. Lee la documentación.
Necesitas una cuenta de Growwer. La clave de API la creas en tu perfil.
Growwer, dentro de tus herramientas
Tu cuenta, por HTTP
68 operaciones REST sobre tu cuenta, tus proyectos, el catálogo de medios, los pedidos desde el presupuesto hasta la entrega, el servicio gestionado y los medios que vendes. Una clave nunca puede hacer más de lo que tu cuenta puede hacer en la web.
Presupuesta antes, reintenta con la misma clave
Presupuesta un pedido con tu saldo antes de hacerlo. Cada escritura lleva una Idempotency-Key, así que un reintento con la misma clave nunca crea un segundo pedido, y una clave de API solo puede gastar el saldo que ya tienes en el monedero.
Un contrato público y siete SDK
El contrato OpenAPI es público y la referencia de esta página se genera a partir de él. Los clientes oficiales para TypeScript, Python, PHP, Go, Java, .NET y Ruby se generan a partir del mismo contrato, y también hay una colección de Postman.
Qué puedes hacer con la API
Algunas de las operaciones, según quién las usa. La referencia de abajo documenta las 68.
Compradores
Busca en el catálogo para un proyecto con los filtros de la web y consulta sus ofertas flash.
GET /projects/{id}/medias
Solicita los medios concretos que no encuentres para un proyecto.
POST /projects/{id}/media-requests
Presupuesta un pedido con tu saldo y hazlo.
POST /orders/estimate
Revisa borradores, aprueba entregas o pide cambios.
POST /orders/{id}/approve
Agencias
Crea y edita el proyecto de cada cliente desde tus propios sistemas.
POST /projects
Sigue todos tus pedidos consultando qué ha cambiado desde tu última llamada.
GET /orders
Con un servicio gestionado, solicita campañas y acepta o rechaza sus propuestas.
POST /managed-service/campaigns/{id}/proposals/review
Consulta los movimientos del monedero y descarga las facturas para tus informes.
GET /invoices
Vendedores
Da de alta tus medios uno a uno y edita sus tarifas y su oferta.
POST /seller/medias
Acepta, rechaza y entrega los pedidos que recibes.
POST /seller/orders/{id}/deliver
Entrega los cambios que pide un comprador, o recházalos.
POST /seller/orders/{id}/deliver-update
Marca tus vacaciones y consulta tu monedero y tus retiros.
PUT /seller/holiday
API de Growwer
Casi todo lo que haces en Growwer como comprador o como vendedor está disponible por
HTTP: tu cuenta, los proyectos y sus filtros guardados, el catálogo de medios, los
pedidos desde el presupuesto hasta la entrega, el servicio gestionado, y como vendedor
tus medios y los pedidos que reciben. Los monederos, las facturas y los retiros son de
solo lectura: los movimientos de dinero, como las recargas y las solicitudes de retiro,
se hacen en la web. 68 operaciones, autenticadas con una
clave de API que creas tú mismo.
El contrato OpenAPI es la fuente de verdad, y es público: leerlo no requiere clave. Cada
operación de esta página se genera a partir de ese contrato, así que no puede describir
una API que ya no existe.
go get github.com/viralitymedia/growwer-api-sdk/go
Java
Maven
com.growwer:growwer-api
.NET
NuGet
dotnet add package Growwer.Api
Ruby
RubyGems
gem install growwer
Los ejemplos de esta página llaman a la API con un cliente HTTP sencillo, no con los
SDK. Casi todos necesitan solo la librería estándar del lenguaje; los de Python usan
requests, las escrituras en Go usan github.com/google/uuid y PHP
necesita su extensión curl. Los SDK son el atajo cuando el proyecto ya ha pasado de su primera
llamada.
Crear una clave
Las claves se crean desde . Una clave empieza por gw_sk_ y puede tener fecha de caducidad; puedes tener
varias y revocar cualquiera de ellas.
La clave completa se muestra una sola vez, al crearla, y nunca más. Guárdala
donde guardes cualquier otro secreto. Si la pierdes, revócala y crea otra.
Cada clave tiene un permiso, elegido al crearla y fijo durante toda su vida:
read llama a todas las operaciones GET, y
read_write también a las escrituras. Una clave de lectura que llama a una escritura
recibe 403insufficient_capability. Una clave nunca puede hacer más de lo que tu
cuenta puede hacer en la web.
Tu primera petición
Envía la clave como Authorization: Bearer gw_sk_....
GET /api/v1/me devuelve tu cuenta: los datos básicos del perfil, tus saldos de
comprador y de vendedor, tu cupo diario del catálogo y si tienes servicio gestionado. Es la
forma más rápida de comprobar que una clave funciona.
curl -X GET "https://tool.growwer.com/api/v1/me" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Todos los errores responden con la misma forma,
{code, message, requestId, details?}. Decide según code,
que es estable; message es para personas y puede cambiar.
requestId coincide con la cabecera X-Request-Id que lleva cada respuesta:
inclúyelo cuando nos reportes un problema.
{
"code": "validation_failed",
"message": "The request is not valid. See details for each field.",
"requestId": "9b2f6c1e-4d7a-4e3b-8a5f-2c1d0e9f7a64",
"details": {
"fields": {
"promotedProducts": [
"This collection should contain 5 elements or more."
]
}
}
}
Una petición no válida responde 422validation_failed, con los mensajes de cada campo no válido en details.fields, por nombre de campo.
401unauthorized: falta la clave, está mal formada, no existe, está revocada
o caducada, o su cuenta no puede iniciar sesión.
403insufficient_capability: una clave de lectura ha llamado a una escritura.
404not_found: el recurso no existe o no es tuyo.
409invalid_state: el recurso es tuyo, pero su estado no permite la
operación.
500internal_error: un error inesperado.
Cada operación de la referencia indica los estados que puede responder y los códigos que
hay detrás.
Límites de uso
600 peticiones por minuto por usuario, y 300 por clave. Cada respuesta autenticada
lleva X-RateLimit-Limit, X-RateLimit-Remaining y
X-RateLimit-Reset (segundos hasta que se reinicia la ventana) del más estricto
de los dos límites.
Por encima del límite se responde 429rate_limit_exceeded con una cabecera Retry-After en segundos; espera
ese tiempo en lugar de reintentar enseguida.
Las autenticaciones fallidas también tienen límite. Tras 10 fallos con una misma clave
desde una misma dirección en 15 minutos, esa clave responde 429too_many_failed_authentications desde esa dirección. Por encima de 300 fallos
desde una misma dirección en 15 minutos, con cualquier clave, todo intento fallido desde ella
recibe la misma respuesta. Las dos llevan Retry-After. Una clave válida
siempre pasa, así que quien pruebe claves desde tu red nunca bloquea una clave que
funciona.
Si no se puede contactar con el limitador, la llamada se rechaza con 503rate_limit_unavailable; reinténtalo más tarde. El catálogo y las
solicitudes del servicio gestionado tienen además límites diarios propios, que se
describen a continuación.
Acceso al catálogo y límites diarios
Las operaciones del catálogo (buscar los medios de un proyecto, las ofertas flash, el
detalle de un medio y contar los medios de un filtro guardado) comparten un límite que
se cuenta en unidades por día UTC. Cada medio distinto nuevo que te muestran cuesta una
unidad. Una página sin ningún medio nuevo, también una vacía, cuesta una unidad, igual
que el primer recuento del día de un filtro guardado. Las cuentas con un pedido completado reciente, como comprador o como vendedor, tienen
5.000 unidades al día; cualquier otra cuenta tiene un cupo de prueba de 100 al día, que sube al límite completo en cuanto tiene un pedido completado reciente. El acceso
se guarda en caché unos minutos, así que el límite completo puede tardar un poco en
aplicarse después de que se complete tu primer pedido. Los medios que ya has visto ese
día no cuentan, ni una petición ya respondida ese día mientras las listas de medios, los
temas y el idioma del proyecto sigan igual. Un medio que has pedido siempre se puede
leer con GET /api/v1/medias/{id} sin contar en absoluto.
GET /api/v1/me te dice en qué punto estás: catalogue.eligible es
true cuando tienes el límite completo, catalogue.dailyCap es el límite que se
te aplica y catalogue.remainingToday, cuántas unidades caben todavía hoy.
Es null cuando el recuento no se puede leer en ese momento, y entonces las operaciones
del catálogo responden 503 hasta que se pueda.
Una respuesta que te haría superar tu límite responde 429catalogue_daily_cap_reached, con details.remaining (cuántas unidades
caben todavía hoy), details.limit (el límite que se aplica),
details.tier (full, o trial para una cuenta sin un
pedido completado reciente) y Retry-After (el tiempo hasta la próxima medianoche
UTC). Los medios que ya has visto ese día se siguen pudiendo leer.
El cupo de prueba se puede desactivar. Entonces, una cuenta sin un pedido completado
reciente recibe 403catalogue_requires_recent_order de las operaciones del catálogo, y
GET /api/v1/me indica un catalogue.dailyCap de 0.
Las dos solicitudes del servicio gestionado, POST /api/v1/managed-service/campaign-requests y POST /api/v1/managed-service/info-requests, admiten 5 peticiones cada
una por día UTC. Por encima responden 429managed_service_request_limit_reached, con Retry-After el tiempo
hasta la próxima medianoche UTC. Una solicitud rechazada (4xx) no cuenta;
una que falla en el servidor (5xx) sí, porque puede haberse enviado.
Dar de alta un medio, POST /api/v1/seller/medias, no tiene límite, pero
rechazarlo sí: un medio ya registrado, por ti o por cualquier otro, responde
409media_already_registered, y cada uno de esos rechazos cuenta para un límite
diario por usuario. Por encima, enviar un medio ya registrado responde
429media_duplicate_limit_reached, con Retry-After
el tiempo hasta la próxima medianoche UTC. Los medios aún no registrados nunca se rechazan
por este límite.
Escrituras idempotentes
Toda escritura requiere una cabecera Idempotency-Key: de 1
a 255 caracteres ASCII imprimibles, sin espacios. Un UUID es la opción obvia. Usa una
clave nueva para cada operación y reutilízala solo para reintentar esa misma operación.
Las claves pertenecen a tu cuenta, no a una clave de API concreta.
Una escritura correcta se guarda durante 30 días. Un reintento con la misma clave y la
misma petición repite su respuesta con Idempotent-Replayed: true y no vuelve
a hacer nada, así que una respuesta perdida nunca se convierte en un segundo pedido.
Una escritura rechazada (4xx) no tiene efecto y libera su clave: corrige
la causa y reintenta con la misma clave.
Una escritura fallida (5xx) puede haber tenido efecto, así que nunca
vuelve a ejecutarse con su clave: un reintento recibe 409idempotency_outcome_unknown. Comprueba si tuvo efecto antes de reintentar
con una clave nueva.
Un reintento mientras la primera petición sigue en curso recibe 409idempotency_request_in_progress. Una petición que sigue en curso pasados
5 minutos se trata como fallida.
La misma clave con otra petición (método, ruta, query o cuerpo) recibe
409idempotency_key_reused. Una escritura sin la cabecera recibe 400idempotency_key_required, y una con la cabecera mal formada 400invalid_idempotency_key.
Los dos presupuestos, POST /api/v1/orders/estimate y
POST /api/v1/managed-service/campaigns/{id}/proposals/estimate, no
cambian nada: no llevan Idempotency-Key y una clave read puede llamarlos.
Los pedidos tienen una protección más. Hacer el mismo pedido (mismo proyecto, medio,
tipo y precio) otra vez en los 5 segundos siguientes a uno que sigue en curso responde
409duplicate_order, con details.orderId el pedido anterior, o null
si ya ha terminado o se ha eliminado. La protección solo cubre esos 5 segundos: un reintento
posterior con una Idempotency-Key nueva crea y paga un segundo pedido. Para reintentar
un pedido sin riesgo, reutiliza su clave.
No hay escrituras por lotes. Para dar de alta muchos medios, llama a
POST /api/v1/seller/medias una vez por medio, cada una con su propia
Idempotency-Key, y lee cada respuesta por separado: el 409 o el
422 de un medio no detiene los demás. Los límites de uso se aplican al bucle
como a cualquier otra llamada.
Eliminar un medio, DELETE /api/v1/seller/medias/{id}, nunca cancela un
pedido. Mientras algún pedido del medio no haya terminado responde 409media_has_active_orders, con esos pedidos en details.orderIds,
y no elimina nada.
Paginación, importes y fechas
Los listados responden {items, total} y aceptan limit (20 por
defecto, de 1 a 100) y offset (0 por defecto). Un límite mayor que 100 se
rechaza con 422validation_failed, nunca se recorta en silencio, así que la página que pides es la que recibes. total cuenta todo lo que coincide
con los filtros, no el tamaño de la página.
Los importes son un entero en céntimos más un código de moneda:
{"amount": 12500, "currency": "EUR"} son 125,00 EUR. Las fechas van en ISO-8601;
en una query string, envía el + de la zona horaria como
%2B.
No hay webhooks. Para seguir tus pedidos, consulta GET /api/v1/orders con
sort=updatedAt y updatedSince igual al último
updatedAt que viste. Las respuestas pueden ganar campos con el tiempo, así que
ignora los que no conozcas.
Archivos y descargas
Una escritura que lleva un documento, como el borrador que propones con un pedido o el
que entrega un vendedor, hace referencia a un archivo que subes antes. POST /api/v1/files acepta una subida
multipart/form-data de un archivo odt, doc, docx o txt de hasta 8 MB y devuelve
su id. Un archivo sirve para una sola escritura y caduca 24 horas después
de subirlo.
Puedes tener 20 archivos pendientes: archivos que ninguna escritura ha
usado todavía y que no han caducado. Por encima, POST /api/v1/files responde
429file_limit_reached, con details.limit (cuántos puedes tener) y
Retry-After (los segundos que faltan para que caduque el primero de ellos). Usa
uno de tus archivos pendientes en una escritura, lo que libera su plaza al momento, o espera
ese tiempo. Una subida rechazada por no ser válida (422) no cuenta.
Las descargas, como GET /api/v1/invoices/{id}/pdf, responden con el
propio archivo y su tipo de contenido, no con JSON. Sus errores siguen usando la forma
JSON de arriba.
La referencia sale del contrato OpenAPI, que la API publica en inglés: los resúmenes, las descripciones, las tablas de campos, los ejemplos y los fragmentos de código de cada operación están en inglés.
General
Account
Your profile, balances and catalogue quota, and the codes and names the API uses.
GET /api/v1/me
Your account
Profile basics, the buyer and seller balances, whether your seller account is restricted, whether the catalogue is open to you, and whether you have a managed service.
Respuestas
200
Your account.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/me" \
-H "Authorization: Bearer $GROWWER_API_KEY"
The countries, languages, topics, product types, link types and order states that other operations take and return. Names are in English.
Respuestas
200
Every code, with its English name where it has one.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/vocabulary" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Upload the documents that a later write, such as an order's briefing, references.
POST /api/v1/files
Upload a file
Uploads a document (odt, doc, docx or txt, up to 8 MB) for a later write to reference by its id. A file belongs to you, can be used by one write, and expires 24 hours after it was uploaded; an expired or used file is answered like an unknown one.
You may hold 20 files that no write has used yet and that have not expired. Past them it answers 429 file_limit_reached, with details.limit the number you may hold and Retry-After the seconds until the first of them expires; using one of them in a write frees its place at once. A file refused as invalid (422) is refused before they are counted, and a refused upload stores nothing.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición multipart/form-data, Obligatorio
Campo
Tipo
Descripción
fileObligatorio
string (binary)
Respuestas
201
The file, stored until expiresAt.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
422
No file was sent as the file field, or it is too large, not an odt, doc, docx or txt document, or its name is longer than 255 characters (code validation_failed).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
A page of your projects and how many you have in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/projects" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Creates a project for a website, as the web's project creation does. Growwer then analyses it in the background to recommend media: the project is answered with state: analyzing and turns finished when the analysis ends. Analysis can take hours, and it never finishes when no medium matches the project, so poll GET /projects/{id} with backoff and use createdAt to decide when to stop.
Every value is validated as on the web: topics, language and country take the identifiers GET /vocabulary publishes.
Creating a project also categorises its website through an external service, as the web does. When that service fails the answer is 500, although the project may already be saved, and a retry under the same Idempotency-Key answers 409 idempotency_outcome_unknown. After either, list your projects (GET /projects) before retrying with a new key, or you may create a duplicate.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
name
string | nullmax length 255
rootUrlObligatorio
string (uri)
websiteTypeObligatorio
ecommerce | services | other
topicsObligatorio
integer[]min items 1, max items 1
Exactly one topic id from GET /vocabulary.
languageObligatorio
string
A language code from GET /vocabulary.
country
string | null
A country code from GET /vocabulary; omit it or send null for worldwide.
promotedProductsObligatorio
string[]min items 5, max items 10
5 to 10 products or services the campaign promotes.
userKeywords
string[]max items 100
At most 100 keywords, none with a line break.
Respuestas
202
The project, created and being analysed. Location is its URL.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability), or you have reached the number of projects an account may have without a wallet deposit in the last year (code project_limit_reached).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
One of your projects. Poll it to follow state after creating the project.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The project.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/projects/$PROJECT_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Changes only the fields you send. rootUrl cannot be changed; any field not listed here is refused. Changing language, country, promotedProducts or topics makes Growwer categorise the project and work out its target keywords again, in the background.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
name
string | nullmax length 255
Null or an empty string removes the name.
websiteType
ecommerce | services | other
topics
integer[]min items 1, max items 1
Exactly one topic id from GET /vocabulary.
language
string
A language code from GET /vocabulary.
country
string | null
A country code from GET /vocabulary, or null for worldwide.
promotedProducts
string[]min items 5, max items 10
5 to 10 products or services the campaign promotes.
userKeywords
string[]max items 100
At most 100 keywords, none with a line break.
Respuestas
200
The project as edited.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Deletes one of your projects. A project with an order in progress cannot be deleted until its orders finish.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The project was deleted.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The project has an order in progress (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Search the medias of a project, its flash offers, favourites and discards.
GET /api/v1/flash-offers
List flash offers
The medias on a flash offer, a time-limited discount, in the catalogue of one of your projects. It is GET /projects/{id}/medias with flashOffer=true, and takes the same parameters except flashOffer and savedFilterId. The catalogue access and the daily limit of that operation apply: each new media costs one unit, a page that holds no new media, an empty one included, costs one, and repeating a request already answered the same day is free while the media lists, topics and language of the project stay as they were.
Which of the project's medias to search: all (the default), recommended (those Growwer recommends for the project), or those you marked favourite, discarded or requested, or bought for the project. Do not combine it with the parameter of the same state.
The order. Without it, the web's default order: medias on the project's topic and language first, then best sellers and medias with more published orders. Ties are always broken by media id, so pages never overlap. -growwerRank: best match first; postPrice, linkAdditionPrice: cheapest first; matchedAt, -matchedAt: when Growwer matched the media with the project; -traffic, -domainRating, -referringDomains: highest first; linkedToReferringRatio: lowest first.
domain
query
string
Medias whose domain contains this text, 1 to 255 characters.
websiteType
query
string
A comma-separated list of website types: blog, press.
language
query
string
A comma-separated list of language codes, as in GET /vocabulary.
country
query
string
A comma-separated list of country codes, as in GET /vocabulary.
topics
query
string
A comma-separated list of topic ids, as in GET /vocabulary: medias on any of them.
notBannedTopics
query
boolean
Leave out medias that refuse the topic of the project. Only true applies it; omit it otherwise.
minTraffic
query
integer
Minimum monthly organic traffic.
maxTraffic
query
integer
Maximum monthly organic traffic.
trafficTrendUpward
query
boolean
Medias whose traffic is growing. Only true applies it; omit it otherwise.
minDomainRating
query
integer
Minimum domain rating, 0 to 100.
maxDomainRating
query
integer
Maximum domain rating, 0 to 100.
minLinkedToReferringRatio
query
number
Minimum ratio of linked domains to referring domains, such as 0.5.
maxLinkedToReferringRatio
query
number
Maximum ratio of linked domains to referring domains, such as 1.5.
minPostPrice
query
integer
Minimum post price, in cents.
maxPostPrice
query
integer
Maximum post price, in cents.
postLinkType
query
string
A comma-separated list of link types the post offer gives: dofollow, nofollow, citation.
promotedSocialNetwork
query
string
A comma-separated list of social networks the media promotes posts on: twitter, instagram, facebook, pinterest, tumblr, newsletter.
withoutAdvertisingLabel
query
boolean
Medias that never label posts as advertising. Only true applies it; omit it otherwise.
homepageListing
query
boolean
Medias that offer listing the post on their homepage. Only true applies it; omit it otherwise.
hasLinkAddition
query
boolean
Medias that offer adding a link to an existing article. Only true applies it; omit it otherwise.
minLinkAdditionPrice
query
integer
Minimum link addition price, in cents.
maxLinkAdditionPrice
query
integer
Maximum link addition price, in cents.
linkAdditionLinkType
query
string
A comma-separated list of link types the link addition offer gives: dofollow, nofollow, citation.
recommended
query
boolean
true: only the medias Growwer recommends for the project; false: only the others.
favourite
query
boolean
true: only your favourites for the project; false: leave them out.
requested
query
boolean
true: only the medias you requested for the project; false: leave them out.
bought
query
boolean
true: only medias you bought for the project; false: leave them out.
discarded
query
boolean
true: only the medias you discarded for the project; false: leave them out.
new
query
boolean
Medias Growwer matched with the project recently. Only true applies it; omit it otherwise.
ranksGoalKeyword
query
string
A comma-separated list of keyword origins: medias that rank for a keyword of the project from any of them. user: your keywords; publicGenerated: keywords Growwer found for the project.
ranksAiKeyword
query
string
A comma-separated list of AI answer engines: medias the web lists an AI keyword of the project for, from any of them. googleAiOverview, chatgpt, googleAiMode.
limit
query
integermin 1, max 100, default 20
Medias per page, 1 to 100.
offset
query
integermin 0, max 99900, default 0
Medias to skip, at most 99900.
Respuestas
200
A page of flash offers and how many there are in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The catalogue is open to accounts with recent completed orders, as buyer or as seller, and to other accounts within a daily trial quota; this account has no such order and the trial quota is off (code catalogue_requires_recent_order). GET /me reports catalogue.eligible and catalogue.dailyCap.
404
The resource does not exist, or it is not yours (code not_found).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/flash-offers?projectId=$PROJECT_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
GET /api/v1/medias/{id}
Get a media
One media of the catalogue: an active, public media. A media you have ordered is always readable, even if it has since left the catalogue, and is open to every account. Otherwise the media counts towards the distinct medias the account may see per day (UTC): the full daily cap for accounts with recent completed orders, a smaller trial quota for other accounts (see catalogue.eligible, catalogue.dailyCap and catalogue.remainingToday on GET /me). For the media's state in one of your projects, search the project with GET /projects/{id}/medias.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The media.
Respuestas
200
The media.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The catalogue is open to accounts with recent completed orders, as buyer or as seller, and to other accounts within a daily trial quota; this account has no such order and the trial quota is off (code catalogue_requires_recent_order). GET /me reports catalogue.eligible and catalogue.dailyCap.
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/medias/$MEDIA_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Discards a media for one of your projects, as the web does. Discarding it again changes nothing. The media must be one the catalogue shows for the project: another media, including one of your own as a seller, is answered as not found.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
mediaIdObligatorio
path
string (uuid)
The media.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The media is discarded for the project.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Restores a media you discarded for one of your projects. Restoring one that is not discarded changes nothing. It works for any media, even one the catalogue no longer shows.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
mediaIdObligatorio
path
string (uuid)
The media.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The media is not discarded for the project.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Marks a media as a favourite of one of your projects, as the heart on the web does. Adding a favourite again changes nothing. The media must be one the catalogue shows for the project: another media, including one of your own as a seller, is answered as not found.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
mediaIdObligatorio
path
string (uuid)
The media.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The media is a favourite of the project.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Removes a media from the favourites of one of your projects. Removing one that is not a favourite changes nothing. It works for any media, even one the catalogue no longer shows.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
mediaIdObligatorio
path
string (uuid)
The media.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The media is not a favourite of the project.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Asks Growwer to find the medias of these domains for one of your projects, as the "request specific domains" form on the web does. Each entry may be a domain or a URL; it is read as its full domain, lowercased. Repeated domains are requested once, and a domain already requested changes nothing. Up to 200 distinct domains per call. They then appear in the project's catalogue with project.requested true (requested=true on GET /projects/{id}/medias) once Growwer lists them.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
domainsObligatorio
string[]
Domains or URLs, 1 to 200 distinct domains.
Respuestas
201
The domains were requested: each distinct domain, as Growwer read it.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The medias the catalogue offers for one of your projects, as the web lists them, with each media's state in the project. Filter with the parameters below, which all combine, or apply one of your saved filters with savedFilterId alone. Each account can see a limited number of distinct medias per day (UTC) across the catalogue operations: the full daily cap for accounts with recent completed orders, as buyer or as seller, and a smaller trial quota for other accounts, which rises to the full cap after a completed order (see catalogue.eligible, catalogue.dailyCap and catalogue.remainingToday on GET /me). Each new media of a page costs one unit of that limit, and a page that holds no new media, an empty one included, costs one unit, so a total costs at least one; repeating a request already answered the same day is free, and so are medias seen again that day. A change of the media lists of the project (a media request, a favourite, a discard), its topics or its language makes the same request a new one.
Which of the project's medias to search: all (the default), recommended (those Growwer recommends for the project), or those you marked favourite, discarded or requested, or bought for the project. Do not combine it with the parameter of the same state.
The order. Without it, the web's default order: medias on the project's topic and language first, then best sellers and medias with more published orders. Ties are always broken by media id, so pages never overlap. -growwerRank: best match first; postPrice, linkAdditionPrice: cheapest first; matchedAt, -matchedAt: when Growwer matched the media with the project; -traffic, -domainRating, -referringDomains: highest first; linkedToReferringRatio: lowest first.
savedFilterId
query
string (uuid)
Apply one of your saved filters of this project, including one saved on the web, instead of the other parameters. Do not combine it with any filter, source or sort. A filter saved on the web that uses a filter the API does not support is refused with 422 saved_filter_unsupported.
domain
query
string
Medias whose domain contains this text, 1 to 255 characters.
websiteType
query
string
A comma-separated list of website types: blog, press.
language
query
string
A comma-separated list of language codes, as in GET /vocabulary.
country
query
string
A comma-separated list of country codes, as in GET /vocabulary.
topics
query
string
A comma-separated list of topic ids, as in GET /vocabulary: medias on any of them.
notBannedTopics
query
boolean
Leave out medias that refuse the topic of the project. Only true applies it; omit it otherwise.
minTraffic
query
integer
Minimum monthly organic traffic.
maxTraffic
query
integer
Maximum monthly organic traffic.
trafficTrendUpward
query
boolean
Medias whose traffic is growing. Only true applies it; omit it otherwise.
minDomainRating
query
integer
Minimum domain rating, 0 to 100.
maxDomainRating
query
integer
Maximum domain rating, 0 to 100.
minLinkedToReferringRatio
query
number
Minimum ratio of linked domains to referring domains, such as 0.5.
maxLinkedToReferringRatio
query
number
Maximum ratio of linked domains to referring domains, such as 1.5.
minPostPrice
query
integer
Minimum post price, in cents.
maxPostPrice
query
integer
Maximum post price, in cents.
postLinkType
query
string
A comma-separated list of link types the post offer gives: dofollow, nofollow, citation.
promotedSocialNetwork
query
string
A comma-separated list of social networks the media promotes posts on: twitter, instagram, facebook, pinterest, tumblr, newsletter.
withoutAdvertisingLabel
query
boolean
Medias that never label posts as advertising. Only true applies it; omit it otherwise.
homepageListing
query
boolean
Medias that offer listing the post on their homepage. Only true applies it; omit it otherwise.
hasLinkAddition
query
boolean
Medias that offer adding a link to an existing article. Only true applies it; omit it otherwise.
minLinkAdditionPrice
query
integer
Minimum link addition price, in cents.
maxLinkAdditionPrice
query
integer
Maximum link addition price, in cents.
linkAdditionLinkType
query
string
A comma-separated list of link types the link addition offer gives: dofollow, nofollow, citation.
recommended
query
boolean
true: only the medias Growwer recommends for the project; false: only the others.
favourite
query
boolean
true: only your favourites for the project; false: leave them out.
requested
query
boolean
true: only the medias you requested for the project; false: leave them out.
flashOffer
query
boolean
true: only medias with a flash offer running; false: leave them out.
bought
query
boolean
true: only medias you bought for the project; false: leave them out.
discarded
query
boolean
true: only the medias you discarded for the project; false: leave them out.
new
query
boolean
Medias Growwer matched with the project recently. Only true applies it; omit it otherwise.
ranksGoalKeyword
query
string
A comma-separated list of keyword origins: medias that rank for a keyword of the project from any of them. user: your keywords; publicGenerated: keywords Growwer found for the project.
ranksAiKeyword
query
string
A comma-separated list of AI answer engines: medias the web lists an AI keyword of the project for, from any of them. googleAiOverview, chatgpt, googleAiMode.
limit
query
integermin 1, max 100, default 20
Medias per page, 1 to 100.
offset
query
integermin 0, max 99900, default 0
Medias to skip, at most 99900.
Respuestas
200
A page of matching medias and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The catalogue is open to accounts with recent completed orders, as buyer or as seller, and to other accounts within a daily trial quota; this account has no such order and the trial quota is off (code catalogue_requires_recent_order). GET /me reports catalogue.eligible and catalogue.dailyCap.
404
The resource does not exist, or it is not yours (code not_found).
422
A parameter is not valid (code validation_failed; details.fields names it), or the saved filter uses a web filter the API does not support (code saved_filter_unsupported; details.field names it).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/projects/$PROJECT_ID/medias" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Saved filters
Save catalogue searches of a project and count their medias.
GET /api/v1/projects/{id}/saved-filters
List the saved filters of a project
Your saved filters of one of your projects, newest first, including those saved on the web. A project has at most 100. Apply one with savedFilterId on GET /projects/{id}/medias.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
Respuestas
200
The saved filters and how many there are.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/projects/$PROJECT_ID/saved-filters" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Saves a catalogue search of one of your projects, which then also appears on the web. filters takes the filter parameters of GET /projects/{id}/medias, and source, with the same values; lists may be JSON arrays and flags JSON booleans. With notificationFrequency, Growwer emails you new medias that match. A project has at most 100 saved filters and an account 500.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
nameObligatorio
stringmax length 255
1 to 255 characters.
filtersObligatorio
object
At least one filter parameter of GET /projects/{id}/medias, or source, by name.
notificationFrequency
daily | weekly | monthly
Email new matching medias this often. Omit it for no emails.
Respuestas
201
The saved filter.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The project already has 100 saved filters, or the account 500 (code saved_filter_limit_reached), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Deletes one of your saved filters of one of your projects, including one saved on the web. Its notifications stop.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
filterIdObligatorio
path
string (uuid)
The saved filter.
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The saved filter was deleted.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key lacks the capability the operation needs (code insufficient_capability), or the account may not perform it (code forbidden).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key was used for a different request (code idempotency_key_reused), its first request is still running (code idempotency_request_in_progress), or its first request failed and may have taken effect (code idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
GET /api/v1/projects/{id}/saved-filters/{filterId}/media-count
Count the medias of a saved filter
How many medias of the project's catalogue one of your saved filters matches: the total of GET /projects/{id}/medias with its savedFilterId. The number is cached for up to 24 hours, and it can differ from the count the web shows, which is not limited to the project's catalogue. A filter saved on the web that uses a filter the API does not support is refused with 422 saved_filter_unsupported. The catalogue access and the daily limit of the catalogue apply: a count costs one unit of that limit the first time a filter is counted in a UTC day, and counting the same filter again that day is free.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
The project.
filterIdObligatorio
path
string (uuid)
The saved filter.
Respuestas
200
The number of matching medias.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The catalogue is open to accounts with recent completed orders, as buyer or as seller, and to other accounts within a daily trial quota; this account has no such order and the trial quota is off (code catalogue_requires_recent_order). GET /me reports catalogue.eligible and catalogue.dailyCap.
404
The resource does not exist, or it is not yours (code not_found).
422
The saved filter uses a web filter the API does not support (code saved_filter_unsupported); details.field names it.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/projects/$PROJECT_ID/saved-filters/$FILTER_ID/media-count" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Respuesta de ejemplo
{
"count": 0
}
Buyer orders
Estimate, place and follow the orders you buy, and act on them.
GET /api/v1/orders
List your orders
The orders you bought, newest first by default. To follow your orders, poll with sort=updatedAt and updatedSince set to the updatedAt of the last order you saw: an order moves to the end of that list each time it changes state.
Parámetros
Nombre
En
Tipo
Descripción
projectId
query
string (uuid)
Only the orders of this project of yours.
mediaId
query
string (uuid)
Only the orders on this media.
state
query
string
Only the orders in one of these states, comma-separated. An unknown state is refused with 422 and the list of valid ones.
updatedSince
query
string (date-time)
Only the orders whose updatedAt is at or after this instant, an ISO-8601 date-time with its offset (send + as %2B).
sort
query
-createdAt | updatedAtdefault "-createdAt"
-createdAt, newest first, or updatedAt, least recently changed first. Orders of the same instant come in id order.
limit
query
integermin 1, max 100, default 20
Orders per page, 1 to 100.
offset
query
integermin 0, default 0
Orders to skip.
Respuestas
200
A page of your orders and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/orders" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Places an order on a media for one of your projects and pays its price from your wallet's available balance, as ordering on the web does. Estimate the order first (POST /orders/estimate) and send the price it answers as expectedPrice: the order is placed only at that price.
Placing the same order (same project, media, type and price) again within 5 seconds of one still in progress is refused with duplicate_order. Its details.orderId is the earlier order, or null when that order has finished or was deleted since.
A proposed draft (proposedDraftFileId, from POST /files) is used up when the order is placed. If the order is then refused because another request changed your balance, the media or its price, or placed the same order, the file is used up all the same and the refusal's message says so: upload it again before retrying.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
expectedPriceObligatorio
Money
The price POST /orders/estimate answered. Only EUR is accepted.
Respuestas
201
The order, placed and paid. Location is its URL.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The project is not yours, or the media does not exist or is not one you can order for this project (code not_found).
409
The order cannot be placed, and nothing was charged:
price_changed: the price is not expectedPrice; details.currentPrice is the price.
insufficient_balance: your available balance does not cover the price; details has required, available and missing (Money).
duplicate_order: the same order was placed seconds ago; details.orderId is that order, or null.
seller_on_holiday: the media is not taking orders right now.
media_topic_not_allowed: the media does not accept the project's topic.
offer_unavailable: the media does not offer this type of order.
idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown: the Idempotency-Key conflicts.
422
The body is not valid (code validation_failed, with the messages of each field in details.fields), or proposedDraftFileId names no file you can use: it does not exist, has expired or was already used (code file_unusable).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Checks and prices the order POST /orders would place with the same body, without expectedPrice, and compares the price with your wallet's available balance. Nothing is placed, charged or used up, so a read-only key may call it and it takes no Idempotency-Key. Send the price it answers as expectedPrice when you place the order.
The estimate is refused for the same reasons as the order itself, except a balance that does not cover the price: that is answered here with sufficientBalance: false and the missing amount.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
typeObligatorio
post | link_addition
projectIdObligatorio
string (uuid)
One of your projects.
mediaIdObligatorio
string (uuid)
A media you can order for the project (GET /projects/{id}/medias).
The day to publish on, at least a few days ahead as the web requires.
draftReviewable
boolean
Whether you review the draft before it is published. Defaults to false.
proposedDraftFileId
string (uuid)
A file uploaded with POST /files to propose your own draft. The estimate checks it without using it up.
Respuestas
200
The price of the order and how your wallet covers it.
400
The body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The project is not yours, or the media does not exist or is not one you can order for this project (code not_found).
409
The order could not be placed:
seller_on_holiday: the media is not taking orders right now.
media_topic_not_allowed: the media does not accept the project's topic.
offer_unavailable: the media does not offer this type of order.
422
The body is not valid (code validation_failed, with the messages of each field in details.fields), or proposedDraftFileId names no file you can use: it does not exist, has expired or was already used (code file_unusable).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
One order you bought, with its briefing, its draft and its state history.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The order.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/orders/$ORDER_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Approves the delivery of an order whose pendingAction is yours to review the delivery, as the web does. The order finishes and the seller is paid. It takes no body.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
200
The order, approved.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not pending your review of its delivery (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Approves the draft of a post order whose pendingAction is yours to review the draft (GET /orders/{id}/draft downloads it), as the web does. The seller then publishes it. It takes no body.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
200
The order, with its draft approved.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not a post order with a draft pending your review (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The file you attached to the briefing of a post order. 404 when the order has none (briefing.hasProposedDraft is false) or the file cannot be read.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The file, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
POST /api/v1/orders/{id}/cancel
Cancel an order
Cancels an order the seller has not accepted yet (statepending_acceptance), as the web does. Its price returns to your wallet's available balance, and the seller is told your reason.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
stringmin length 10, max length 2000
What the seller is told, 10 to 2000 characters once trimmed.
Respuestas
200
The order, cancelled.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The seller has already accepted or refused the order, or it has finished (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The file of the current draft of a post order. 404 when the order has no draft file (draft.hasFile is false) or the file cannot be read.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The file, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
POST /api/v1/orders/{id}/request-draft-update
Request changes to a draft
Asks the seller to change the draft of a post order whose pendingAction is yours to review the draft, as the web does. The seller is told your reason.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
stringmin length 10, max length 2000
What the seller is told, 10 to 2000 characters once trimmed.
Respuestas
200
The order, with its draft back with the seller.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not a post order with a draft pending your review (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Asks the seller to change the delivery of an order whose pendingAction is yours to review the delivery, as the web does. The seller is told your reason.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
stringmin length 10, max length 2000
What the seller is told, 10 to 2000 characters once trimmed.
Respuestas
200
The order, back with the seller.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not pending your review of its delivery (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Your buyer balance, its movements and documents, and your invoices.
GET /api/v1/invoices
List your invoices
The invoices of your top-ups, newest first.
Parámetros
Nombre
En
Tipo
Descripción
limit
query
integermin 1, max 100, default 20
Invoices per page, 1 to 100.
offset
query
integermin 0, default 0
Invoices to skip.
Respuestas
200
A page of your invoices and how many you have in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/invoices" \
-H "Authorization: Bearer $GROWWER_API_KEY"
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/pdf), no con JSON.
GET /api/v1/wallets/buyer
Get your buyer wallet
The balance you buy with, and the page where you top it up.
Respuestas
200
Your buyer wallet.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/wallets/buyer" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Every movement of your buyer wallet, newest first: top-ups, order debits and their refunds, gifts and manual corrections.
Parámetros
Nombre
En
Tipo
Descripción
limit
query
integermin 1, max 100, default 20
Movements per page, 1 to 100.
offset
query
integermin 0, default 0
Movements to skip.
Respuestas
200
A page of your movements and how many there are in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/wallets/buyer/transactions" \
-H "Authorization: Bearer $GROWWER_API_KEY"
GET /api/v1/wallets/buyer/transactions/{id}/document
Download the document of a wallet movement
The document Growwer attached to a movement of your buyer wallet. 404 when the movement has none (hasDocument is false) or the file cannot be read.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The document, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
Managed services
Your managed service campaigns, their proposals, and requests to Growwer.
POST /api/v1/managed-service/campaign-requests
Request a new campaign
Asks your account manager for a new campaign, as the managed service page does: the team emails you to agree on it. For accounts with a managed service (GET /me managedService.active); without one, POST /managed-service/info-requests asks about the service.
The API admits a limited number of such requests per user and UTC day (5 by default; the refusal message states the current limit). Past it, it answers 429 managed_service_request_limit_reached, with Retry-After the time to the next UTC midnight. A request that is refused (4xx) does not count; one that fails on the server (5xx) does, as it may have been sent.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
409
You have no managed service yet (code managed_service_required), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The campaigns your managed service runs for you, newest first. Without a managed service the list is empty: GET /me says whether you have one.
Parámetros
Nombre
En
Tipo
Descripción
limit
query
integermin 1, max 100, default 20
Campaigns per page, 1 to 100.
offset
query
integermin 0, default 0
Campaigns to skip.
Respuestas
200
A page of your campaigns and how many you have in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/managed-service/campaigns" \
-H "Authorization: Bearer $GROWWER_API_KEY"
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/managed-service/campaigns/$CAMPAIGN_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
GET /api/v1/managed-service/campaigns/{id}/proposals
List the proposals of a campaign
The medias the team proposes for the campaign, newest first. Those proposed await your review (POST /managed-service/campaigns/{id}/proposals/review).
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
state
query
string
Only proposals in these states, comma-separated: proposed, accepted, cancelled, purchase_started, purchase_finished.
limit
query
integermin 1, max 100, default 20
Proposals per page, 1 to 100.
offset
query
integermin 0, default 0
Proposals to skip.
Respuestas
200
A page of the campaign's proposals and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/managed-service/campaigns/$CAMPAIGN_ID/proposals" \
-H "Authorization: Bearer $GROWWER_API_KEY"
GET /api/v1/managed-service/campaigns/{id}/proposals-summary
Download the summary of a campaign's proposals
The PDF the campaign page offers: the proposals awaiting your review, accepted or being published, newest first, in your language. With extended=true it also shows each proposal's price, the price it was proposed at (proposedPrice). One summary of yours is rendered at a time: a request while another is being rendered gets 429 proposals_summary_in_progress, to retry after the Retry-After header.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
extended
query
true | falsedefault "false"
Whether to show the prices.
Respuestas
200
The summary.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/pdf), no con JSON.
POST /api/v1/managed-service/campaigns/{id}/proposals/estimate
Estimate accepting proposals
Totals the campaign's accepted proposals that still await their order and the proposed ones you name in accept, and compares the total with your wallet's available balance. Each proposal counts at its currentPrice, or at its proposedPrice when the media no longer offers the service. Nothing is accepted, charged or reserved, so a read-only key may call it and it takes no Idempotency-Key.
The estimate is advisory: accepting a proposal charges nothing. The team charges your wallet when it places the order for an accepted proposal, and the same balance pays for the orders you place yourself.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Cuerpo de la petición application/json, Opcional
Campo
Tipo
Descripción
accept
string (uuid)[]
The proposed proposals you would accept, each once. Leave it out to price only the accepted ones.
Respuestas
200
The totals and how your wallet covers them.
400
The body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The campaign is not yours, or a proposal named in accept is not one of the campaign's (code not_found, with details.proposalId).
409
A proposal named in accept is not awaiting your review (code invalid_state, with details.proposalIds).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
POST /api/v1/managed-service/campaigns/{id}/proposals/review
Accept or reject proposals
Decides on every proposal of the campaign that awaits your review (stateproposed), as the campaign page does: name each one once, with accept or reject, and a comment for the team to reject one. Their order in the body does not matter. Accepting charges nothing: the team places the orders for the accepted proposals and your wallet pays for them then. POST /managed-service/campaigns/{id}/proposals/estimate says what they would cost.
When every proposal is accepted the campaign moves to proposal_accepted; when one is rejected the team is told and prepares others. A proposal someone else moved on the campaign page while the request ran is answered in the state it reached.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reviewsObligatorio
object[]min items 1
One decision on each proposal of the campaign that is proposed, each named once. Their order does not matter.
Respuestas
200
The campaign and the proposals you reviewed, as they now are.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The campaign is not yours, or a proposal named is not one of the campaign's (code not_found, with details.proposalId).
409
No proposal of the campaign awaits your review (code no_pending_proposals), or a proposal named does not (code invalid_state, with details.proposalIds), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is invalid (code validation_failed), or it leaves out proposals awaiting your review (code review_incomplete, with details.missingProposalIds).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Asks the team about the managed service for your website, as the managed service landing page does: the team contacts you. For accounts without a managed service (GET /me managedService.active); with one, POST /managed-service/campaign-requests requests a new campaign.
The API admits a limited number of such requests per user and UTC day (5 by default; the refusal message states the current limit). Past it, it answers 429 managed_service_request_limit_reached, with Retry-After the time to the next UTC midnight. A request that is refused (4xx) does not count; one that fails on the server (5xx) does, as it may have been sent.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
409
You already have a managed service (code managed_service_exists), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Your seller holiday, during which your medias take no orders.
PUT /api/v1/seller/holiday
Set your holiday
Starts, changes or ends your holiday, as the holiday settings of your profile page do. While you are on holiday your medias take no orders. endDate is the day your holiday ends, at 00:00 of that day in Growwer's server time, and must be later than now; leave it out, or send null, for a holiday you end yourself. Ending the holiday takes no endDate.
A holiday that already is as you ask is answered 200 without a change. A restricted seller account stays on holiday until the restriction is lifted, so any change is refused. Your holiday is also in GET /me.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
onHolidayObligatorio
boolean
endDate
string (date) | null
Respuestas
200
Your holiday, as it now is.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
409
Your seller account is restricted, so its holiday cannot change (code seller_restricted), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not valid (code validation_failed): an endDate that is not a later day, or one sent with onHoliday false.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
By creation date, number of published orders or publication rate; a leading - sorts descending. Medias with no publication rate come first ascending, last descending. Ties come in id order.
limit
query
integermin 1, max 100, default 20
Medias per page, 1 to 100.
offset
query
integermin 0, default 0
Medias to skip.
Respuestas
200
A page of your medias and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/seller/medias" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Registers one of your medias, as the media create page does. The media is created with state: pending_review and Growwer reviews it in the background, as for a media registered on the web; GET /seller/medias/{id} shows its state.
rootUrl is the media's root URL; typology is blog or press.
country and language take the codes GET /vocabulary publishes; topics and bannedTopics take its topic ids, at most 100 each, and no topic may be both; bannedTopics left out bans none.
postOffer.pricingOptions lists every link type you offer for sponsored posts, at least one. Each option needs at least one fee, and every option must offer the same sides (written by you, written by the buyer or Growwer), as the page requires. Each fee is at least 1 EUR, sent in cents.
postOffer.maximumLinks is how many links a sponsored post may hold, 1 to 4; postOffer.advertisingLabellingPolicy whether posts are labelled as advertising, never when left out; postOffer.promotedSocialNetworks the social networks posts are promoted on, none when left out.
linkAdditionOffer.pricingOptions lists the link types you offer for adding a link to an existing article; left out, null or an empty list offers none.
extraServices lists the extra services you offer, none when left out. It is sent at the top level, although GET /seller/medias/{id} reads it inside postOffer.
acceptMediaPublishingTerms and declareMediaOwnership must be true: they accept the media publishing terms and declare that you own or manage the media, as the page's checkboxes do, and are recorded as your consents for the media.
A media registered already, by you or by anyone else, is refused with 409 media_already_registered, and each such refusal counts toward a daily limit of refusals (429 media_duplicate_limit_reached once reached); medias not registered yet are never limited by it.
To register many medias, call this operation once per media, each call with its own Idempotency-Key and its own answer (201, 409, 422 or 429); there is no batch operation. The request limits apply to the loop as to any calls (600 requests per minute per user and 300 per key), and each 409 media_already_registered counts toward the daily limit of refusals as it does for a single call. Retry a call that got no answer with its same Idempotency-Key, as for any write.
Parámetros
Nombre
En
Tipo
Descripción
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
rootUrlObligatorio
string (uri)
typologyObligatorio
blog | press
countryObligatorio
string
A country code from GET /vocabulary.
languageObligatorio
string
A language code from GET /vocabulary.
topicsObligatorio
integer[]min items 1, max items 100
Topic ids from GET /vocabulary.
bannedTopics
integer[]max items 100
The topic ids from GET /vocabulary the media refuses.
postOfferObligatorio
object
linkAdditionOffer
object | null
extraServices
object[]
acceptMediaPublishingTermsObligatorio
true
Must be true: you accept the media publishing terms.
declareMediaOwnershipObligatorio
true
Must be true: you own or manage this media.
Respuestas
201
The media, registered with state: pending_review. Location is its URL.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
409
Nothing was registered: your seller account is restricted (code seller_restricted); or the media is registered already (code media_already_registered), with details.mediaId naming it only when it is yours, and the refusal counts toward the daily limit of such refusals; or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not valid (code validation_failed): details.fields names each field by its path in the body, such as postOffer.pricingOptions.0.feeWhenSellerWritesPost or topics.1, with the rule the media create page applies. Nothing was registered, and the refusal does not count toward the daily limit of media_already_registered refusals.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
One of your medias, with your fees, its extras, the competitive fees Growwer suggests and how it performs. Another seller's media is not found.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The media.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/seller/medias/$MEDIA_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
PATCH /api/v1/seller/medias/{id}
Edit the offer of a media you sell on
Sets the fees, extra services, typology and post offer characteristics of one of your medias, as the media edit page saves them. Send only the fields you change: a field you send replaces that field wholly, a field you leave out stays as it is, inside postOffer too (sending only postOffer.maximumLinks keeps your fees).
typology is blog or press.
postOffer.pricingOptions lists every link type you offer for sponsored posts, at least one. A link type you leave out is no longer offered. Each option needs at least one fee, and every option must offer the same sides (written by you, written by the buyer or Growwer), as the page requires. Each fee is at least 1 EUR.
postOffer.maximumLinks is how many links a sponsored post may hold, 1 to 4; postOffer.advertisingLabellingPolicy whether posts are labelled as advertising (always or never); postOffer.promotedSocialNetworks the full list of social networks posts are promoted on, each once (an empty list for none).
linkAdditionOffer.pricingOptions lists the link types you offer for adding a link to an existing article; null or an empty list stops offering link additions.
extraServices is the full list of extra services you offer; an empty list removes them all. It is sent at the top level, although GET /seller/medias/{id} reads it inside postOffer.
The fees are your base fees, the ones GET /seller/medias/{id} returns: while a flash offer runs, its discount keeps applying on top of them, and currentCost shows the result. currentCost may be sent back as read and is ignored. Country, language, topics and comments are not edited here.
As on the page, a change of the post offer's price may cancel the managed-service proposals accepted for the media whose price it changes, and raising the price above the best competitor's tells Growwer's support team. A restricted seller account may edit its offer.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
typology
blog | press
postOffer
object
linkAdditionOffer
object | null
extraServices
object[]
Respuestas
200
The media, with the changes saved.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not valid (code validation_failed): details.fields names each field by its path in the body, such as postOffer.pricingOptions.0.feeWhenSellerWritesPost, with the rule the media edit page applies. Nothing changed.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Deletes one of your medias, in any state, as the media delete button does. The media must have no order in progress: close or reject its orders first. The API never cancels an order for you, and an order placed while the delete runs is refused, never cancelled.
What goes with the media, as on the web:
A running flash offer ends with it, and its managed-service proposals are deleted.
Its finished orders stay, with the media's URL; they read media.id null.
Buyers' favourites and discards of the domain stay, as they are kept by domain.
The catalogue search drops the media shortly after the 204, as the search index updates asynchronously.
Repeating the call with the same Idempotency-Key answers the same 204 with Idempotent-Replayed: true; a new key after the delete answers 404.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
204
The media was deleted.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
Nothing was deleted. Your seller account is restricted (code seller_restricted); the media has orders that are not finished (code media_has_active_orders, details.orderIds lists them: close or reject them first); or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
POST /api/v1/seller/medias/{id}/apply-competitive-fees
Set the competitive fees Growwer suggests
Sets your post fees for the media to the competitive fees Growwer suggests, the competitiveFees of GET /seller/medias/{id}, as the button on the media edit page does. Each link type you offer gets the suggested fee on each side it already has a fee for; no link type gains a side it did not offer.
Two differences from the page: a side Growwer has no suggestion for keeps your fee (the page clears it), and the fixed fee the page falls back to when it cannot find a competitive one is never applied (the page applies it). When neither side has a suggestion, nothing changes and the answer is 409 no_competitive_fees. When your fees already are the suggested ones, or the suggestion is only for a side none of your link types offers, nothing changes and the answer is 200.
The fees set are your base fees: a running flash offer keeps discounting them. As with a fee edit, a change of the price may cancel the managed-service proposals accepted for the media whose price it changes. Send no body, or an empty object.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
200
The media, with the suggested fees set.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
Growwer has no competitive fees to suggest for the media now (code no_competitive_fees), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not empty, or the fees set break a rule of the media edit page (code validation_failed). Nothing changed.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The orders placed on your medias, and accepting, delivering or refusing them.
GET /api/v1/seller/orders
List the orders you sell
The orders placed on your medias, newest first by default. To follow them, poll with sort=updatedAt and updatedSince set to the updatedAt of the last order you saw: an order moves to the end of that list each time it changes state. The orders you bought are under GET /orders.
Parámetros
Nombre
En
Tipo
Descripción
mediaId
query
string (uuid)
Only the orders on this media of yours.
state
query
string
Only the orders in one of these states, comma-separated. An unknown state is refused with 422 and the list of valid ones.
updatedSince
query
string (date-time)
Only the orders whose updatedAt is at or after this instant, an ISO-8601 date-time with its offset (send + as %2B).
sort
query
-createdAt | updatedAtdefault "-createdAt"
-createdAt, newest first, or updatedAt, least recently changed first. Orders of the same instant come in id order.
limit
query
integermin 1, max 100, default 20
Orders per page, 1 to 100.
offset
query
integermin 0, default 0
Orders to skip.
Respuestas
200
A page of the orders you sell and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/seller/orders" \
-H "Authorization: Bearer $GROWWER_API_KEY"
One order placed on one of your medias, with its briefing, its draft and its state history. An order you only bought is not found here; it is under GET /orders/{id}.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The order.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/seller/orders/$ORDER_ID" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Accepts an order placed on one of your medias (statepending_acceptance), as the web does. A post order whose draft is still to be written (by you or by Growwer) moves to pending_draft; any other order moves to pending_order_delivery. The buyer is told. Takes no body.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Respuestas
200
The order, accepted.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not waiting for your acceptance (code invalid_state), your seller account is restricted and accepts no orders (code seller_restricted; support can tell you why), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The file the buyer attached to the briefing of a post order you sell. 404 when the order has none (briefing.hasProposedDraft is false) or the file cannot be read.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The file, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
POST /api/v1/seller/orders/{id}/deliver
Deliver an order
Delivers an order placed on one of your medias (statepending_order_delivery), as the web does. A post order takes the URL of the published post and the confirmation of its publication date; a link addition order takes no body, and any field is refused. The order moves to pending_order_delivery_review and the buyer is asked to review it, or, for a post order whose scheduled publication date is still to come, to scheduled without telling the buyer yet. The URL is checked to be a URL without < or >, as the web does.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Opcional
Campo
Tipo
Descripción
urlObligatorio
string (uri)
The URL of the published post. It is checked to be a URL without < or >, as the web does; whether the post carries the links is not checked here.
publicationDateConfirmedObligatorio
boolean
Must be true. Confirms the post is live, or for an order with a scheduled publication date, that it will be published on that date.
Respuestas
200
The order, delivered or scheduled.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not waiting for its delivery (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Delivers the draft of a post order placed on one of your medias whose draft you write (statepending_draft), as the web does, from a file you uploaded with POST /files. The order moves to pending_draft_review when the buyer reviews drafts, otherwise to pending_order_delivery. The file is used up once the draft is delivered; a refused request leaves it usable.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
fileIdObligatorio
string (uuid)
A file you uploaded with POST /files and have not used yet. It must be an odt, doc, docx or txt file of up to 8 MB. It is used up once the draft is delivered.
Respuestas
200
The order, with its draft delivered.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not waiting for a draft you write (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not valid, or the file is not an odt, doc, docx or txt file of up to 8 MB (code validation_failed, with the messages of each field in details.fields), or fileId names no file you can use: it does not exist, has expired or was already used (code file_unusable).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
POST /api/v1/seller/orders/{id}/deliver-draft-update
Deliver a draft update
Delivers the draft update the buyer asked for on a post order placed on one of your medias whose draft you write (statepending_draft_update), as the web does, from a file you uploaded with POST /files. The order moves back to pending_draft_review. The file is used up once the draft is delivered; a refused request leaves it usable.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
fileIdObligatorio
string (uuid)
A file you uploaded with POST /files and have not used yet. It must be an odt, doc, docx or txt file of up to 8 MB. It is used up once the draft is delivered.
Respuestas
200
The order, with its updated draft delivered.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The buyer has not asked for an update of a draft you write (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The body is not valid, or the file is not an odt, doc, docx or txt file of up to 8 MB (code validation_failed, with the messages of each field in details.fields), or fileId names no file you can use: it does not exist, has expired or was already used (code file_unusable).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Delivers the update the buyer asked for on an order placed on one of your medias (statepending_order_delivery_update), as the web does. A post order takes the URL of the published post, which may be the same as before, and the confirmation of its publication date; both must be sent. A link addition order takes no body, and any field is refused. The order moves back to pending_order_delivery_review and the buyer is asked to review it.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Opcional
Campo
Tipo
Descripción
urlObligatorio
string (uri)
The URL of the published post. It is checked to be a URL without < or >, as the web does; whether the post carries the links is not checked here.
publicationDateConfirmedObligatorio
boolean
Must be true. Confirms the post is live, or for an order with a scheduled publication date, that it will be published on that date.
Respuestas
200
The order, with the update delivered.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The buyer has not asked for an update (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
The file of the current draft of a post order you sell. 404 when the order has no draft file (draft.hasFile is false) or the file cannot be read. Earlier drafts are not available.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The file, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
POST /api/v1/seller/orders/{id}/refute-draft-update
Refuse a draft update
Refuses the draft update the buyer asked for on a post order placed on one of your medias whose draft you write (statepending_draft_update), as the web does. The order moves back to pending_draft_review and the buyer is told your reason. A draft Growwer or the buyer writes cannot be refused here.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
stringmin length 10, max length 2000
Why you refuse the buyer's request, which the buyer is told, 10 to 2000 characters once trimmed.
Respuestas
200
The order, with its draft back in review.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The buyer has not asked for an update of a draft you write, including when Growwer or the buyer writes the draft (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Refuses the update the buyer asked for on an order placed on one of your medias (statepending_order_delivery_update), as the web does. The order moves back to pending_order_delivery_review and the buyer is told your reason.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
stringmin length 10, max length 2000
Why you refuse the buyer's request, which the buyer is told, 10 to 2000 characters once trimmed.
Respuestas
200
The order, back in review.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The buyer has not asked for an update (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Rejects an order placed on one of your medias that you have not accepted yet (statepending_acceptance), as the web does. The order moves to rejected_by_seller, its price returns to the buyer, and the buyer is told your reason.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Idempotency-KeyObligatorio
header
stringmax length 255
A new key for each write, reused only to retry that same write. 1 to 255 printable ASCII characters without spaces (! to ~); any other value answers 400 invalid_idempotency_key.
Cuerpo de la petición application/json, Obligatorio
Campo
Tipo
Descripción
reasonObligatorio
object
Respuestas
200
The order, rejected.
400
The write has no Idempotency-Key header (code idempotency_key_required), the header is not 1 to 255 printable ASCII characters without spaces (code invalid_idempotency_key), or the body is not a JSON object (code invalid_json).
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
403
The key is read-only (code insufficient_capability).
404
The resource does not exist, or it is not yours (code not_found).
409
The order is not waiting for your acceptance (code invalid_state), or the Idempotency-Key conflicts (codes idempotency_key_reused, idempotency_request_in_progress, idempotency_outcome_unknown).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Your seller balance, its movements and documents, and your withdrawals.
GET /api/v1/wallets/seller
Get your seller wallet
What your sales have earned: the balance you can withdraw now and what is held until orders settle. restricted is true while your seller account is restricted; the reason is not published here, and support can tell you more.
Respuestas
200
Your seller wallet.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/wallets/seller" \
-H "Authorization: Bearer $GROWWER_API_KEY"
Every movement of your seller wallet, newest first: earnings from orders, withdrawals and manual corrections. An earning names its order (orderId) and a withdrawal its request (withdrawalId).
Parámetros
Nombre
En
Tipo
Descripción
limit
query
integermin 1, max 100, default 20
Movements per page, 1 to 100.
offset
query
integermin 0, default 0
Movements to skip.
Respuestas
200
A page of your movements and how many there are in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/wallets/seller/transactions" \
-H "Authorization: Bearer $GROWWER_API_KEY"
GET /api/v1/wallets/seller/transactions/{id}/document
Download the document of a seller wallet movement
The document Growwer attached to a movement of your seller wallet. 404 when the movement has none (hasDocument is false) or the file cannot be read.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The document, with its own content type and name.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
GET /api/v1/withdrawals
List your withdrawals
The withdrawals you requested from your seller wallet, newest first. Requesting a withdrawal is not available through the API; use the seller wallet page.
Parámetros
Nombre
En
Tipo
Descripción
state
query
string
Only the withdrawals in one of these states, comma-separated: started, approved, rejected. An unknown state is refused with 422.
limit
query
integermin 1, max 100, default 20
Withdrawals per page, 1 to 100.
offset
query
integermin 0, default 0
Withdrawals to skip.
Respuestas
200
A page of your withdrawals and how many match in all.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
422
The request is not valid (code validation_failed). details.fields holds the messages for each invalid field, by field name.
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
curl -X GET "https://tool.growwer.com/api/v1/withdrawals" \
-H "Authorization: Bearer $GROWWER_API_KEY"
The invoice you uploaded for one of your withdrawals, named withdrawal-{id}-invoice.pdf. 404 when the withdrawal has none (hasInvoice is false); 503 storage_unavailable when the file cannot be read right now.
Parámetros
Nombre
En
Tipo
Descripción
idObligatorio
path
string (uuid)
Respuestas
200
The invoice file.
401
The API key is missing, malformed, unknown, revoked or expired, or its account cannot sign in (code unauthorized).
404
The resource does not exist, or it is not yours (code not_found).
429
Over the rate limit (code rate_limit_exceeded), or too many failed authentications (code too_many_failed_authentications): with this key from this address, or from this address with any key; a valid key is never refused for it. On the catalogue operations, also when the response would take the account beyond the units of the catalogue it may spend per UTC day (code catalogue_daily_cap_reached): each new media costs one unit and a response that holds no new media, an empty one or a count included, costs one unless the same request was answered today while the media lists, topics and language of its project stayed as they were, which is free; details.remaining says how many units still fit today, details.limit is the daily cap that applies and details.tier is full, or trial for an account without a recent completed order, whose quota rises to the full cap after one; Retry-After is the time to the next UTC midnight, and a request already answered today stays readable. On the managed service requests, also when you sent as many requests of that kind as you may per UTC day (code managed_service_request_limit_reached): Retry-After is the time to the next UTC midnight. On POST /seller/medias, also when you sent as many medias that are already registered as you may per UTC day (code media_duplicate_limit_reached): Retry-After is the time to the next UTC midnight, and medias not registered yet are still accepted.
500
An unexpected error (code internal_error).
503
The rate limiter cannot be reached, so the call is refused (code rate_limit_unavailable), or a stored file cannot be read right now (code storage_unavailable). Retry later.
Responde con el archivo (application/octet-stream), no con JSON.
Preguntas sobre la API de Growwer
Una API REST sobre tu cuenta de Growwer. Casi todo lo que haces en Growwer como comprador o como vendedor está disponible por HTTP: los proyectos, el catálogo de medios, los pedidos, el servicio gestionado y, como vendedor, tus medios y los pedidos que reciben. Te autenticas con una clave de API que creas tú mismo.
Cualquier cuenta de Growwer, en la página de claves de API de tu perfil. Cada clave puede leer, o leer y escribir, según elijas al crearla, y eso no cambia después. La clave completa solo se muestra una vez. Mira cómo funcionan las claves.
Hacer un pedido gasta tu saldo de comprador, así que necesita una clave de lectura y escritura. Una clave solo puede gastar el saldo que ya tienes en el monedero: las recargas y las solicitudes de retiro se hacen en la web. Presupuesta antes el pedido para comparar su precio con tu saldo y, si reintentas, reutiliza su Idempotency-Key, para que una respuesta perdida nunca se convierta en un segundo pedido. Aceptar una propuesta del servicio gestionado no cobra nada por sí mismo; después el equipo hace el pedido, que gasta tu saldo.
600 peticiones por minuto por usuario y 300 por clave. Por encima del límite, la API responde 429 con una cabecera Retry-After. El catálogo tiene además un límite diario propio: 5.000 unidades al día para las cuentas con un pedido completado reciente, como comprador o como vendedor, y un cupo de prueba de 100 al día para cualquier otra cuenta. Mira cómo se cuenta ese límite.
No. Para seguir tus pedidos, consulta GET /api/v1/orders con sort=updatedAt y updatedSince igual al último updatedAt que viste.
Las dos cosas. Hay clientes oficiales para TypeScript, Python, PHP, Go, Java, .NET y Ruby, generados a partir del contrato OpenAPI público: los comandos de instalación están en librerías cliente. Para trabajar desde Claude, ChatGPT, Cursor u otro asistente de IA sin escribir código, conecta el MCP de Growwer.
Conecta tus sistemas a Growwer
Crea tu cuenta y, después, una clave de API en tu perfil.