Um detalhe importante (principalmente para iniciantes): API não é só WEB.
Sei que hoje em dia "API" acabou virando quase que um sinônimo de "URL que retorna um JSON", mas o termo é bem mais amplo que isso (e a ideia geral, inclusive, antecede a web). Também sei que o post acima está focando mais nesse tipo específico (API Web), e isso nem é uma crítica a ele, é só porque eu sou chato mesmo :-)
Mas acho que não custa nada aprofundar um pouco mais o tema.
API é a sigla para "Application Programming Interface" (algo como "Interface de Programação de Aplicações"), que é basicamente "algo" que permite que dois programas/softwares/sistemas/aplicativos "conversem" entre si (a grosso modo, eles trocam informações de forma programática). O detalhe é que esses programas não precisam estar na web.
Por exemplo, os sistemas operacionais costumam disponibilizar API's (uma série de funções) para que outros programas possam acessar seus recursos e serviços. Daí temos, só para citar dois exemplos, a Linux Kernel API e a Windows API. Ambos servem para que outros programas acessem recursos do sistema operacional (por exemplo, para criar uma janela com botões e texto, chame as funções do sistema em vez de você mesmo desenhar cada pixel na mão). As API's do iOS e Android são similares, pois permitem que aplicativos acessem recursos do celular (câmera, sensores de movimento, etc) de forma programática: o seu aplicativo vai ter algum código que acessa esses recursos, e isso é feito através da API (classes/funções) de cada sistema.
"Ah, mas meu app acessa a internet"
Sim, mas aí ele não está mais usando a API do sistema operacional. Uma coisa é ele usar esta API para colocar o botão na tela, outra é o código que acessa a internet depois que o botão é clicado.
Uma lib/biblioteca/pacote/módulo/crate/etc nada mais é que uma API que permite que seu programa tenha acesso à funções prontas que fazem algo que vc precisa. É um programa feito por alguém, que disponibiliza várias funções/classes/etc para que outros programas usem. E não necessariamente eles precisam acessar a internet. Sei que isso contrasta muito com a ideia atual de API Web, mas não fui eu quem criei a definição. De qualquer forma, isso mostra como o termo é mais amplo do que parece.
Até mesmo um compilador pode ter uma API. É o caso da LLVM C++ API, que é composta de várias funções que você pode usar para por exemplo construir seu próprio compilador. O Roslyn (plataforma que inclui, entre outros, o compilador do C#) também possui uma API que permite que você acesse cada etapa da compilação de forma programática. Com isso é possível criar ferramentas que analisam, refatoram e até mesmo geram código, usando a própria linguagem para isso (pois a API disponibiliza classes/métodos em C# mesmo). Nada de Web, REST, JSON, etc. Somente dois programas conversando (no caso, um programa que vc vai escrever, conversando com outro programa, que é o compilador).
Por fim, uma API Web (que é o que se tornou mais popular hoje em dia) segue a mesma ideia básica ("algo" que permite que dois programas conversem/troquem dados), a diferença é que sua forma de acesso é pela internet. Note que nem o formato JSON é obrigatório, ele apenas se popularizou nos últimos anos, mas vc poderia usar qualquer outro (<ufa>graças a deus o terrível SOAP tem sido cada vez menos usado</ufa>).