Q:

How do I only post to API if item doesn't exist but return item's ID either way?

I am POSTing to my API a schedule.  If the user selected to be notified I want to store their email in a separate table (in the name of normalization!) so that when I queue the job, i can reference the ID of the email.
I only want to insert the email if it doesn't exist, but store the ID of the email in the table with the schedule.
What's the best way to go about this?  I'm thinking 2 separate calls will be required?
I guess what I really need to know is, how do I POST and return the ID of either the existing, or new ID for the email address?
// POST /api/email
[HttpPost]
public IHttpActionResult AddToEmails(EmailDto emailDto)
{
    if (!ModelState.IsValid)
        return BadRequest();

    var email = Mapper.Map<EmailDto, EMAILS>(emailDto);

    _context.EMAILS.Add(email);
    _context.SaveChanges();

    emailDto.ID = email.ID;
    return Created(new Uri(Request.RequestUri + "/" + email.ID), emailDto);
}

// POST /api/schedule
[HttpPost]
public IHttpActionResult AddToSchedule(ScheduleDto sequenceDto)
{
    if (!ModelState.IsValid)
        return BadRequest();

    var sequence = Mapper.Map<ScheduleDto, SCHEDULE>(sequenceDto);

    _context.SCHEDULE.Add(sequence);
    _context.SaveChanges();

    sequenceDto.ID = sequence.ID;
    return Created(new Uri(Request.RequestUri + "/" + sequence.ID), sequenceDto);
}

EDIT:
@Chris Mack, Thank you for the guidance.  I ended up making the change to my API call which basically does the same thing:
// POST /api/email
[HttpPost]
public IHttpActionResult AddToEmails(EmailDto emailDto)
{
    if (!ModelState.IsValid)
       return BadRequest();

    var email = Mapper.Map<EmailDto, EMAILS>(emailDto);
    var emailCheck = _context.EMAILS.SingleOrDefault(
        c => c.EMAIL.ToString().ToUpper() == emailDto.EMAIL.ToString().ToUpper() 
          && c.TYPE == emailDto.TYPE
    );

    if (emailCheck == null)
    {
        _context.EMAILS.Add(email);
        _context.SaveChanges();
        emailDto.ID = email.ID;
    } else
    {
        emailDto.ID = emailCheck.ID;
    }

    return Created(new Uri(Request.RequestUri + "/" + emailDto.ID), emailDto);
}

A:

I would have a stored procedure that executes the SQL INSERT only if the item does not exist (use an IF statement), and then returns/selects the ID of that item (whether it previously existed or not). You can then return that ID as a return value in your POST call.

