Skip to content

Confirma e coloca a importação de posts na fila

POST/api/import/spreadsheet/{id}/start

Auth
Requires a token
Who can call it:
owner
admin
moderator
finance
SuperAdmin
X-CommunityId
X-CommunityId Send the X-CommunityId of the community the operation happens in.
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

Owner e admin. Recebe o mesmo `mapping` e `options` da prévia, valida, congela e coloca na fila (`QUEUED`, 202). O processamento roda em segundo plano, linha a linha: cada post é gravado com a data de publicação da planilha (`createdAt` fica com a hora real da importação) e **em silêncio** (sem pontos de ranking, fora do bloco de novidades dos e-mails). Quem inicia passa a ser quem importa. O autor segue as regras de `authorProfileId` em `POST /api/content`: a pessoa **desta** comunidade com o e-mail da coluna `authorEmail`; e-mail de quem não é da comunidade pula a linha (`AUTHOR_NOT_MEMBER`), a menos que `options.unknownAuthor` seja `importer` (a linha fica com quem importa, aviso `AUTHOR_NOT_FOUND`); e-mail de um só vale para quem tem papel abaixo do de quem importa: owner sobre admin, moderador, financeiro e membro; admin sobre moderador, financeiro e membro; SuperAdmin sobre qualquer um (senão a linha é pulada, `AUTHOR_ROLE_PROTECTED`). Nunca uma linha é atribuída a outra pessoa sem o aviso. Post em nome de outra pessoa guarda quem importou (`postedByProfileId`) e vai para o log da comunidade (`post.created_on_behalf`). Quem deixou de ser owner ou admin antes de o processamento começar não importa nada (`FAILED`). **Limites** que nenhum arquivo contorna: o texto da planilha inteira depois de descompactada (30 milhões de caracteres, na análise), o HTML dos conteúdos a importar (25 MB; acima, 400 `bodyTooLarge`), 20 imagens por linha e 300 imagens ou 500 MB por importação (o que passar vira link e aviso `IMAGE_LIMIT` ou `IMAGE_BUDGET`). Uma importação de posts por vez na comunidade: outra na fila ou rodando dá 409 `importRunning`. Imagens do corpo são baixadas com as mesmas regras de segurança e os mesmos limites de uma imagem enviada (até 50 MB, JPEG, PNG, WebP ou GIF; endereços internos recusados) e hospedadas na Memberfy; a que falhar vira link para o original e aviso `IMAGE_FAILED` na linha. Uma linha cujo post (mesmo título e data) já existe é pulada (`ALREADY_EXISTS`), então importar o mesmo arquivo de novo não duplica. Ao terminar, quem importou recebe um e-mail com o resumo. Acompanhe em `GET /api/import/spreadsheet/{id}`; `DELETE /api/import/{id}` cancela (o que já entrou fica).

Parameters

NameInTypeDescription
idrequiredpathstring (uuid)

Headers

NameTypeDescription
X-CommunityIdoptionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Request body application/json

NameTypeDescription
sheetoptionalstring
headerRowoptionalinteger≥ 1, ≤ 30
delimiteroptional, | ; | | |
encodingoptionalutf-8 | windows-1252 | iso-8859-1 | utf-16le | utf-16be
mappingrequiredobject[]
mapping[].columnrequiredintegerO `index` da coluna, como veio na análise.
mapping[].targetrequiredignore | title | body | authorEmail | publishedAt | space | type | tags`title` (obrigatório em post e artigo), `body` (Markdown ou HTML; imagens são baixadas e hospedadas na Memberfy), `authorEmail` (pessoa da comunidade; sem correspondência, quem importa), `publishedAt` (data de publicação no fuso da comunidade), `space` (id, slug ou nome), `type` (post, artigo ou curto), `tags` (separadas por vírgula, ponto e vírgula ou barra vertical). Cada destino em uma coluna só.
optionsoptionalobject
options.spaceIdoptionalstring (uuid)Space padrão (módulo `content` ou `feed`). Obrigatório sem coluna `space`; vale também quando o space da linha não existe ou não aceita o tipo.
options.typeoptionalpost | article | shortTipo das linhas sem coluna `type` (padrão `post`). `post` e `artigo` viram post com título; `short` vira post curto (até 500 caracteres, só em space de feed).
options.visibilityoptionalpublic | membersPadrão `members`.
options.unknownAuthoroptionalskip | importerLinha com e-mail de quem não é da comunidade: `skip` (padrão) pula a linha; `importer` publica como quem importa, com aviso.
options.dateOrderoptionalDMY | MDYOrdem de datas como 03/04/2024. Sem a opção, deduzida da coluna (um dia acima de 12 decide) ou do idioma da comunidade.

Responses

StatusDescription
202Na fila; devolve a importação (sem as linhas).
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado.
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
409A importação não está mais `ANALYZED` (`notEditable`) ou já há outra importação de posts na fila ou rodando nesta comunidade (`importRunning`).

curl example

curl -X POST "https://api.memberfy.net/api/import/spreadsheet/<id>/start" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"mapping":[{}]}'