> For the complete documentation index, see [llms.txt](https://support.pipefile.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.pipefile.com/api-reference/contacts.md).

# Contacts

The people you send requests to. Each contact needs a name and at least one of email or phone.

## List contacts

> Returns your contacts, and those you share with your team, sorted by name, 25 per page.

```json
{"openapi":"3.0.3","info":{"title":"Pipefile API","version":"1.0"},"tags":[{"name":"Contacts","description":"The people you send requests to. Each contact needs a name and at least\none of email or phone.\n"}],"servers":[{"url":"https://api.pipefile.com/v1","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Your API key with the `Token` prefix: `Authorization: Token <your API key>`."}},"parameters":{"Page":{"name":"page","in":"query","description":"The page to return, starting at 1.","schema":{"type":"integer","minimum":1,"default":1}},"PageSize":{"name":"page_size","in":"query","description":"Results per page.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}},"schemas":{"ContactPage":{"allOf":[{"$ref":"#/components/schemas/PageInfo"},{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}},"required":["results"]}]},"PageInfo":{"type":"object","properties":{"count":{"type":"integer","description":"Total number of results."},"num_pages":{"type":"integer"},"next":{"type":"string","nullable":true,"description":"URL of the next page, or null on the last page."},"previous":{"type":"string","nullable":true,"description":"URL of the previous page, or null on the first page."}},"required":["count","num_pages","next","previous"]},"Contact":{"type":"object","properties":{"id":{"type":"string","description":"The contact ID (32 hex characters)."},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"Phone number in international format, or an empty string."},"email_bounced":{"type":"boolean","description":"Email to this address bounced."},"email_complained":{"type":"boolean","description":"The recipient marked an email from Pipefile as spam."},"phone_unreachable":{"type":"boolean","description":"Text messages to this number could not be delivered."}},"required":["id","name","email","phone","email_bounced","email_complained","phone_unreachable"]},"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}},"responses":{"Forbidden":{"description":"The API key is missing, invalid or revoked, the account is not active, or you don't have access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Nothing with that ID, or that page, exists for you.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Throttled":{"description":"Too many calls. Wait the number of seconds in the message, then retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/contacts/":{"get":{"tags":["Contacts"],"operationId":"listContacts","summary":"List contacts","description":"Returns your contacts, and those you share with your team, sorted by name, 25 per page.","parameters":[{"name":"name","in":"query","description":"Contacts whose name contains this text (case-insensitive).","schema":{"type":"string"}},{"name":"email","in":"query","description":"Contacts whose email contains this text (case-insensitive).","schema":{"type":"string"}},{"name":"phone","in":"query","description":"Contacts whose phone number contains this text.","schema":{"type":"string"}},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PageSize"}],"responses":{"200":{"description":"One page of contacts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPage"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/Throttled"}}}}}}
```

## Create a contact

> Creates a contact. If you already have a contact with exactly the same\
> name, email and phone, that contact is returned instead of a duplicate.\
> Returns \`200\`, not \`201\`.<br>

```json
{"openapi":"3.0.3","info":{"title":"Pipefile API","version":"1.0"},"tags":[{"name":"Contacts","description":"The people you send requests to. Each contact needs a name and at least\none of email or phone.\n"}],"servers":[{"url":"https://api.pipefile.com/v1","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Your API key with the `Token` prefix: `Authorization: Token <your API key>`."}},"schemas":{"ContactInput":{"type":"object","description":"A name plus an email address, a phone number, or both.","properties":{"name":{"type":"string","maxLength":255},"email":{"type":"string","format":"email"},"phone":{"type":"string","description":"International format, for example `+15555550123`."}},"required":["name"]},"Contact":{"type":"object","properties":{"id":{"type":"string","description":"The contact ID (32 hex characters)."},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"Phone number in international format, or an empty string."},"email_bounced":{"type":"boolean","description":"Email to this address bounced."},"email_complained":{"type":"boolean","description":"The recipient marked an email from Pipefile as spam."},"phone_unreachable":{"type":"boolean","description":"Text messages to this number could not be delivered."}},"required":["id","name","email","phone","email_bounced","email_complained","phone_unreachable"]},"ValidationErrors":{"type":"object","additionalProperties":true,"description":"Field name to a list of error messages. Nested fields (such as checklist items) return nested objects or lists in the same shape."},"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}},"responses":{"ValidationError":{"description":"The request body or a query parameter is not valid. Each key is a field name (or `non_field_errors`) with a list of messages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrors"}}}},"Forbidden":{"description":"The API key is missing, invalid or revoked, the account is not active, or you don't have access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Throttled":{"description":"Too many calls. Wait the number of seconds in the message, then retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/contacts/":{"post":{"tags":["Contacts"],"operationId":"createContact","summary":"Create a contact","description":"Creates a contact. If you already have a contact with exactly the same\nname, email and phone, that contact is returned instead of a duplicate.\nReturns `200`, not `201`.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactInput"}}}},"responses":{"200":{"description":"The contact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/Throttled"}}}}}}
```

## GET /contacts/{contact\_id}/

> Get a contact

```json
{"openapi":"3.0.3","info":{"title":"Pipefile API","version":"1.0"},"tags":[{"name":"Contacts","description":"The people you send requests to. Each contact needs a name and at least\none of email or phone.\n"}],"servers":[{"url":"https://api.pipefile.com/v1","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Your API key with the `Token` prefix: `Authorization: Token <your API key>`."}},"schemas":{"Contact":{"type":"object","properties":{"id":{"type":"string","description":"The contact ID (32 hex characters)."},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"Phone number in international format, or an empty string."},"email_bounced":{"type":"boolean","description":"Email to this address bounced."},"email_complained":{"type":"boolean","description":"The recipient marked an email from Pipefile as spam."},"phone_unreachable":{"type":"boolean","description":"Text messages to this number could not be delivered."}},"required":["id","name","email","phone","email_bounced","email_complained","phone_unreachable"]},"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}},"responses":{"Forbidden":{"description":"The API key is missing, invalid or revoked, the account is not active, or you don't have access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Nothing with that ID, or that page, exists for you.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Throttled":{"description":"Too many calls. Wait the number of seconds in the message, then retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/contacts/{contact_id}/":{"get":{"tags":["Contacts"],"operationId":"getContact","summary":"Get a contact","responses":{"200":{"description":"The contact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/Throttled"}}}}}}
```

## Update a contact

> Replaces the contact's name, email and phone. Send all three; \`name\` is required.

```json
{"openapi":"3.0.3","info":{"title":"Pipefile API","version":"1.0"},"tags":[{"name":"Contacts","description":"The people you send requests to. Each contact needs a name and at least\none of email or phone.\n"}],"servers":[{"url":"https://api.pipefile.com/v1","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Your API key with the `Token` prefix: `Authorization: Token <your API key>`."}},"schemas":{"ContactInput":{"type":"object","description":"A name plus an email address, a phone number, or both.","properties":{"name":{"type":"string","maxLength":255},"email":{"type":"string","format":"email"},"phone":{"type":"string","description":"International format, for example `+15555550123`."}},"required":["name"]},"Contact":{"type":"object","properties":{"id":{"type":"string","description":"The contact ID (32 hex characters)."},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","description":"Phone number in international format, or an empty string."},"email_bounced":{"type":"boolean","description":"Email to this address bounced."},"email_complained":{"type":"boolean","description":"The recipient marked an email from Pipefile as spam."},"phone_unreachable":{"type":"boolean","description":"Text messages to this number could not be delivered."}},"required":["id","name","email","phone","email_bounced","email_complained","phone_unreachable"]},"ValidationErrors":{"type":"object","additionalProperties":true,"description":"Field name to a list of error messages. Nested fields (such as checklist items) return nested objects or lists in the same shape."},"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}},"responses":{"ValidationError":{"description":"The request body or a query parameter is not valid. Each key is a field name (or `non_field_errors`) with a list of messages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrors"}}}},"Forbidden":{"description":"The API key is missing, invalid or revoked, the account is not active, or you don't have access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Nothing with that ID, or that page, exists for you.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Throttled":{"description":"Too many calls. Wait the number of seconds in the message, then retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/contacts/{contact_id}/":{"put":{"tags":["Contacts"],"operationId":"updateContact","summary":"Update a contact","description":"Replaces the contact's name, email and phone. Send all three; `name` is required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactInput"}}}},"responses":{"200":{"description":"The updated contact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/Throttled"}}}}}}
```

## Delete a contact

> Removes the contact from your contact list. Requests already sent to them are not affected.

```json
{"openapi":"3.0.3","info":{"title":"Pipefile API","version":"1.0"},"tags":[{"name":"Contacts","description":"The people you send requests to. Each contact needs a name and at least\none of email or phone.\n"}],"servers":[{"url":"https://api.pipefile.com/v1","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Your API key with the `Token` prefix: `Authorization: Token <your API key>`."}},"responses":{"Forbidden":{"description":"The API key is missing, invalid or revoked, the account is not active, or you don't have access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Nothing with that ID, or that page, exists for you.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Throttled":{"description":"Too many calls. Wait the number of seconds in the message, then retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]}}},"paths":{"/contacts/{contact_id}/":{"delete":{"tags":["Contacts"],"operationId":"deleteContact","summary":"Delete a contact","description":"Removes the contact from your contact list. Requests already sent to them are not affected.","responses":{"204":{"description":"The contact was deleted."},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/Throttled"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://support.pipefile.com/api-reference/contacts.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
